同时使用托管数组和 std:array 不兼容
Posted
技术标签:
【中文标题】同时使用托管数组和 std:array 不兼容【英文标题】:Incompatibility using managed array and std:array at same time 【发布时间】:2014-04-14 14:01:24 【问题描述】:我的 C++/CLI 代码使用这样的数组(例如):
array<String^>^ GetColNames()
vector<string> vec = impl->getColNames();
array<String^>^ arr = gcnew array<String^>(vec.size());
for (int i = 0; i < vec.size(); i++)
arr[i] = strConvert(vec[i]);
return arr;
在我将库“数组”添加到项目之前,它编译正常:
#include <array>
那我就不知道怎么使用托管CLI数组了,因为编译器认为所有声明的数组都是std::array
。
错误示例:
array<String^>^ arr
// ^ Error here: "too few arguments for class template "std::array""
gcnew array<String^>(vec.size())
// ^ Error: "Expected a type specifier"
如何解决这个问题?我尝试从该文件中删除using namespace std
,但这没有区别。我应该从项目的所有其他 C++ 文件中删除它吗?
【问题讨论】:
c++-cli 肯定不是 C++。 删除using namespace std;
?请参阅此处了解更多信息:***.com/questions/1452721/…
你得到了using namespace std;
你得到了你应得的:)
@Aschratt jrok:已经尝试过(从该文件中删除 using namespace std
)。包含 时出现相同的错误
【参考方案1】:
显然,您在某个范围内有一个using namespace std;
。如果找不到,请注意它在 .h 文件中的使用情况。
您可以解决歧义,array 等 C++/CLI 扩展关键字位于 cli
命名空间中。这编译得很好:
#include "stdafx.h"
#include <array>
using namespace std; // <=== Uh-oh
using namespace System;
int main(cli::array<System::String ^> ^args)
auto arr = gcnew cli::array<String^>(42);
return 0;
【讨论】:
当然,这就是问题所在。仅从 C++/CLI 文件中删除它是不够的。谢谢。您的第二个选项也可以,但我决定在我的项目中删除using namespace std
。以上是关于同时使用托管数组和 std:array 不兼容的主要内容,如果未能解决你的问题,请参考以下文章
c++ 数组与 std::vector 和 std::array 的效率