2014-04-14 2 views
12

I (예를 들어)과 같은 배열을 사용하여 내 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; 
} 

그것은 잘 컴파일하는 것을 프로젝트 : 컴파일러가 선언 된 모든 배열은 std::array을 것으로 생각하기 때문에

#include <array> 

가 그럼 난, 관리 CLI 배열을 사용하는 방법을 모르겠어요.

오류 예 :

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++ 파일에서 해당 파일을 제거해야합니까?

+0

C++ - cli 가장 확실하게 C++ 아닙니다. – Deduplicator

+0

'using namespace std;'를 제거 하시겠습니까? 자세한 내용은 다음을 참조하십시오 : http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice – Carsten

+3

'네임 스페이스 표준 사용하기'가 있습니다.) – jrok

답변

36

분명히 어딘가에 범위가 using namespace std;입니다. 그것을 찾을 수 없다면 .h 파일에서 사용되는 것에 조심하십시오.

배열과 같은 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; 
} 
+3

확실히 문제였습니다. C++/CLI 파일에서만 제거하는 것만으로는 충분하지 않았습니다. 감사. 두 번째 옵션도 잘 작동하지만, 내 프로젝트에서 '네임 스페이스 표준 사용하기'를 제거하기로 결정했다. – SysDragon

관련 문제