C литеральный символ* или ошибка строковой переменной «не может быть литеральным элементом данных»

#c# #c -cli #literals

Вопрос:

Я работаю над проектом C#, который зависит от проекта C /CLI. Я использую несколько литеральных членов (которые являются константами в C#), используя такие типы, как int или unsigned short , к которым мой проект C# может получить доступ в качестве константы. Я хотел сделать то же самое со струнами. Поскольку это возможно в C#, я попытался сделать это на C …и затем столкнулся с проблемой.

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

IntelliSense не выдает мне ошибок, но при создании этого кода появляется эта ошибка: «‘TestNamespace::TestClass::testString’: не может быть литеральным элементом данных»

Я изменил символ* на const символ*, std::строка и указатели на другие типы символов. Я много копался в Интернете по этому поводу и кое-что понял, но понятия не имею, почему это не работает. Я также читал о строковых литералах и подумал, что это мне поможет. Приятно знать такие вещи, но не обязательно в этой ситуации.

Ответ №1:

Строки в .NET являются System::String^ типом данных, поэтому вам нужно объявить их как этот тип, а не char* как .

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

Теперь TestString будет видно из C# как TestNamespace.TestClass.TestString .