2014-03-26 2 views
0

내 코드를 컴파일했고이 오류 메시지가 터미널에 나타 났으면 그게 무슨 뜻인지 전혀 알지 못합니다. 누군가 설명하거나 힌트를 줄 수 있습니까?이 오류가 무엇을 의미하는지 전혀 모르겠다

/tmp/ccZ95DTV.o: In function `main': homework3_test.cpp:(.text+0x514): 
undefined reference to `std::vector<int, std::allocator<int> >& 
apply<PowerN>(std::vector<int, std::allocator<int> >&, PowerN)' 
collect2: ld returned 1 exit status 

코드 :

int test_power1, test_power2, test_power3; 
PowerN power_three(3); 
//test_power will now be 1 
power_three(test_power1); 
//test_power will now be 3 
power_three(test_power2); 
//test_power will now be 9 
power_three(test_power3); 
if (1 == test_power1) { 
    std::cout<<"PowerN works for 3**0! +10\n"; 
    score += 10; 
} 
else { 
    std::cout<<"PowerN failed on 3**0!\n"; 
} 

if (3 == test_power2 and 9 == test_power3) { 
    std::cout<<"PowerN works for 3**1 and 3**2! +10\n"; 
    score += 10; 
} 
else { 
    std::cout<<"PowerN failed for 3**1 and 3**2!\n"; 
} 

std::vector<int> test_power_v(3); 
PowerN power_lessfour(-4); 
//apply turns the vector into [1, -4, 16] 
apply(test_power_v, power_lessfour); 
std::vector<int> check_power_v; 
check_power_v << 1 << -4 << 16; 
if (test_power_v == check_power_v) { 
    std::cout<<"Applying PowerN with -4 works! +10\n"; 
    score += 10; 
} 
else { 
    std::cout<<"Applying PowerN with -4 failed!\n"; 
} 

그래서 무엇을 추가하는 것은 나의 강사에 의해 주어진 테스트 코드입니다. 내 코드 구현을보고 싶다면 알려주세요.

때문에 이러한 코드 라인 내 헤더 파일

template <typename T> 
vector<int>& apply(vector<int>& v, T function); 

이며, 이것들은 CPP 파일

template <typename T> 
vector<int>& apply(vector<int>& v, T function) { 
    for (vector<int>::iterator I = v.begin(); I != v.end(); ++I) { 
     function(*I); 
    } 
    return v; 
} 

고마워의 구현입니다. 나는이 문제를 해결한다. 템플릿은 구현 파일이 아니라 헤더 파일에 정의되어야합니다. 당신이 당신의 컴파일러를 요구하는

template <typename PowerN> vector<int> apply(vector<int>&, PowerN) 

그리고 당신이 그것을라고하지만 실제로 소스의이 기능을 위해 몸을 쓴 적이 :

+0

코드 – balaji

+0

을 공유 할 수 있다면 몇 가지 코드를 보여줄 수 있습니까? – Claudiordgz

+0

전화를 걸 때 변수/개체 중 하나의 철자가 틀린 것 같습니다. 우편 번호! – Coderchu

답변

2

그것은 당신이 서명 함수의 프로토 타입을 만든 의미 짓다.

  • 오타 몸을 쓰는이 함수의 이름 :

    당신을 했습니까?

  • 본문을 쓸 때 함수에 약간 다른 서명을하십시오 (예 : & 또는 그 외의 것을 남겨 두십시오)?
  • 작성하지 않은 다른 소스 파일에 본문을 씁니다.

사람들이 코드를 게시하면 사람들의 진단을 개선하는 데 도움이됩니다.

+1

템플릿이라고 생각하면, 둘 다 다른 TU에있을 수 없습니다. – chris

관련 문제