2015-01-27 7 views
-3

내가 통과 벡터의 주소는 다음 구문을 사용하여이 :정의되지 않은 심볼 : C++ OS X 벡터

void myfunction(std::vector<double>*); 
int main() 
{ 
    std::vector<double> t; 
    myfunction(&t); 
    return 0; 
} 
void myfunction(std::vector<double> &v) 
{ 
    cout << "The function ran" <<endl; 
} 

이 오류를 받고 난 이유를 모르겠어.

pal-nat184-134-146:p25 pdevieti$ g++-4.9 test.cpp 
Undefined symbols for architecture x86_64: 
    "myfunction(std::vector<double, std::allocator<double> >*)", referenced from: 
     _main in ccVmpacj.o 
ld: symbol(s) not found for architecture x86_64 
collect2: error: ld returned 1 exit status 
+0

'myfunction' 선언이 정의와 일치하지 않습니다. – juanchopanza

+0

'myfunction'의 선언에서 인수는 double 타입의 벡터에 대한 포인터입니다. 정의에서 동일한 종류의 벡터에 대한 참조를 취합니다. – adam10603

+1

링커 오류가 발생했기 때문에 OS와 컴파일러를 다시 설치 했습니까? ?! – Praetorian

답변

4

CHAGE이이에

void myfunction(std::vector<double>*); 

는 :

void myfunction(std::vector<double>&); 

오류는 선언과 "myFunction이"의 정의에 서명이 다르기 때문이다. myfunction을 벡터에 대한 포인터를받는 함수로 선언하지만 참조를받는 함수로 정의합니다. 참고 문헌과 포인터는 언어 관점에서 다른 것들입니다.

매우 자세한 설명은 this thread을 참조하십시오.

+0

나는 다른 방법으로 가고 싶다. 참조를 사용하는 것이다. – adam10603

+1

그것은 달려있다. 참조가 해당 객체가없는 경우에는 의미가 없습니다. 이 경우 포인터를 사용하고'nullptr '을 사용하여 부재를 나타낼 수 있습니다. 따라서 OP는 자신의 유스 케이스에 가장 적합한 것이 무엇인지 판단해야합니다. – nicebyte

+0

신난다. 고맙다, 해결했다. 배열에 값을 두 배로 저장하기 만하면 참조 또는 포인터를 전달하는 것이 더 좋습니까? – Peter

관련 문제