-1

I'm working on a C# project which is dependent on a C++/CLI project. I'm using a few literal members (which are constants in C#) using types such as int or unsigned short that my C# project can access as a constant. I wanted to do the same with strings. Since it's possible in C#, I attempted to do it in C++...which I then ran into the problem.

using namespace System;

namespace TestNamespace
{
    static ref class TestClass
    {
        literal char* TestString = "fish";
    };
}

IntelliSense doesn't give me errors, but when this code is built, this error shows up: "'TestNamespace::TestClass::TestString': cannot be a literal data member"

I've changed char* to const char*, std::string, and pointers to other types of chars. I've done much digging on the internet about this stuff and understand some of it, but I have no idea why this isn't working. I've also read about string literals and thought that would help me. Nice stuff to know, but not necessarily in this situation.

madreflection
  • 4,744
  • 3
  • 19
  • 29
JJtheJJpro
  • 81
  • 3
  • 7

1 Answers1

4

Strings in .NET are the System::String^ data type, so you need to declare it as that type, not char*.

using namespace System;

namespace TestNamespace
{
    static ref class TestClass
    {
        literal String^ TestString = "fish";
    };
}

Now TestString will be visible from C# as TestNamespace.TestClass.TestString.

madreflection
  • 4,744
  • 3
  • 19
  • 29