在尝试学习C ++ / CLI Microsoft Windows UI应用程序时,我对我遇到的错误感到困惑。
我已将MyForm
的一个成员定义为
const String ^ SAMPLE_TEXT = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent et nunc at erat commodo placerat.";
在方法中,
System::Void MyForm_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e)
编译器在函数
时给出错误 e->Graphics->DrawString(SAMPLE_TEXT, the_font, blackBrush, *rect);
,错误是,
error C2664: 'void System::Drawing::Graphics::DrawString(System::String ^,System::Drawing::Font ^,System::Drawing::Brush ^,System::Drawing::RectangleF,System::Drawing::StringFormat ^)': cannot convert argument 1 from 'const System::String ^' to 'System::String ^'
我很惊讶DrawString
不接受const String
。也就是说,我希望 String
内容是常量,而不是关心指针本身是可变的。据我了解,限定符const
适用于其直接权利。
如果我在const
的定义中忽略SAMPLE_TEXT
,程序将编译并运行。另外,把它写成,
String ^ const SAMPLE_TEXT = "Lorem ipsum dolor...";
将编译并运行。但是,我理解这意味着文本的常量指针可以更改,而不是我想要的。
这一切都在Visual Studio 2015中完成。
我不能指定String
程序无法更改的内容并且有功能使用它吗?