虽然我可以声明以下内容:
private: std::vector< System::Int32 >* test = new std::vector< System::Int32 >;
声明以下内容时出现错误:
private: std::vector< System::Decimal>* test = new std::vector< System::Decimal >;
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(874,39): error C3699: '&&': cannot use this indirection on type '_Ty'
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(874,39): error C3699: with
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(874,39): error C3699: [
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(874,39): error C3699: _Ty=System::Decimal
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include\vector(874,39): error C3699: ]
有人可以帮忙吗? 预先感谢
System::Decimal
是 C++/CLI(即 .NET)类型,不能放入 std::vector
(本机 C++ 类)中。
这就是您收到的错误消息的含义(与 C++ 中的模板相关的错误往往相当神秘)。
请注意,一般来说,混合 .NET 类型和本机 C++ 类型并不是一个好主意。
在
std::vector<System::Int32>
的情况下,你可以“逃脱”混合,因为 System::Int32
只是原生 int
的别名。
但我建议作为一般规则避免这种混合。
您可以使用
std::vector
,而不是在 .NET 环境中使用
System::Collections::Generic::List
,它与它有一些相似之处(连续内存、随机访问等)。
对于
System::Decimal
,您可以使用:
System::Collections::Generic::List<System::Decimal> ^ test =
gcnew System::Collections::Generic::List<System::Decimal>();
旁注:
每当您确实需要使用原生
std::vector
时,建议直接使用它,而不是通过指针使用,例如:
std::vector<int> v;