使用 C#/C++-CLI 的 Windows 窗体:声明 std::vector 时出错<System::Decimal>

问题描述 投票:0回答:1

虽然我可以声明以下内容:

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:         ]

有人可以帮忙吗? 预先感谢

c# c++ decimal c++-cli stdvector
1个回答
0
投票

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;

	
© www.soinside.com 2019 - 2024. All rights reserved.