2017-03-25 3 views
1

내 수업은 크기 매개 변수입니다. 하나의 메서드에서 임시 배열을 만들어야하지만 클래스의 크기 템플릿을 멤버 함수에 전달하는 방법을 모르겠습니다. 이것은 내가 시도하는 방법입니다클래스 템플릿을 멤버 함수에서 사용할 수 있습니까?

#include <array> 

template<unsigned int N> 
class MyClass{ 
    std::array<int,N> m_data; 
    public:  
    void myFunc(){ 
     std::array<int,N> tempArray; 
    } 
}; 


int main(){ 
    MyClass<5> obj; 
    obj.myFunc(); 
} 

편집 : 빌드 로그 :

C:\Windows\system32\cmd.exe /C ""C:/Program Files/mingw-w64/x86_64-6.3.0-win32-seh-rt_v5-rev1/mingw64/bin/mingw32-make.exe" -j6 SHELL=cmd.exe -e -f Makefile" 
"----------Building project:[ hatizsak_konyv - Debug ]----------" 
mingw32-make.exe[1]: Entering directory 'E:/progi/c++/CodeLite/Other/algoritmusok/dinamikus_programozas/hatizsak_konyv' 
"C:/Program Files/mingw-w64/x86_64-6.3.0-win32-seh-rt_v5-rev1/mingw64/bin/g++.exe" -c "E:/progi/c++/CodeLite/Other/algoritmusok/dinamikus_programozas/hatizsak_konyv/main.cpp" -g -O0 -Wall -o ./Debug/main.cpp.o -I. -I. 
E:/progi/c++/CodeLite/Other/algoritmusok/dinamikus_programozas/hatizsak_konyv/main.cpp: In instantiation of 'void MyClass<N>::myFunc() [with unsigned int N = 5u]': 
E:/progi/c++/CodeLite/Other/algoritmusok/dinamikus_programozas/hatizsak_konyv/main.cpp:15:16: required from here 
E:/progi/c++/CodeLite/Other/algoritmusok/dinamikus_programozas/hatizsak_konyv/main.cpp:8:27: warning: unused variable 'tempArray' [-Wunused-variable] 
     std::array<int,N> tempArray; 
          ^~~~~~~~~ 
"C:/Program Files/mingw-w64/x86_64-6.3.0-win32-seh-rt_v5-rev1/mingw64/bin/g++.exe" -o ./Debug/hatizsak_konyv @"hatizsak_konyv.txt" -L. 
mingw32-make.exe[1]: Leaving directory 'E:/progi/c++/CodeLite/Other/algoritmusok/dinamikus_programozas/hatizsak_konyv' 
====1 errors, 1 warnings==== 
+1

무엇이 질문입니까? –

+0

이 코드는 작동하지 않으며 수정할 수 없습니다. –

+1

템플릿 매개 변수는 메서드 정의 내에서 볼 수 있으며 코드는 그대로 작동해야합니다. 뭐가 문제 야? 어떤 오류 메시지가 나타 납니까? –

답변

3

템플릿 매개 변수는 템플릿 클래스의 볼 안쪽 방법이 있습니다; 코드가 맞습니다.

제공된 코드 예제 또는 빌드 로그에 오류가 전혀 없습니다. 빌드 로그의 메시지는 명령 줄에 제공된 -Wall 옵션에 따라 해당 변수가 사용되지 않는다는 사실을 올바르게 경고하는 경고 (컨텍스트를 제공하기 전의 줄과 함께)입니다. 그 이외의 코드 compiles fine은 ideone과 내 컴퓨터에서 모두 동일합니다 (정확히 경고, 오류가 아님).

[[email protected] /tmp]$ g++ -Wall -Wextra -std=c++11 stuff.cpp 
stuff.cpp: In instantiation of ‘void MyClass<N>::myFunc() [with unsigned int N = 5u]’: 
stuff.cpp:15:16: required from here 
stuff.cpp:8:27: warning: unused variable ‘tempArray’ [-Wunused-variable] 
     std::array<int,N> tempArray; 
          ^~~~~~~~~ 

빌드 로그의 끝에있는 "1 오류"메시지는 CodeLite가 컴파일러 출력을 오해 한 것입니다. 당신과 비슷한 조건으로 an open bug about it가 있습니다.

관련 문제