2012-05-26 4 views
0

EDIT : aList가이 코드에서 포인터로 참조되었지만 현재 동일한 문제가있는 현재 버전이 아닙니다.std :: vector는 코드 분할 후 밀어 넣을 객체를 참조하지 못합니다.

이 코드는 인터페이스 파일과 구현 파일에서 분리하려고하기 전에 완벽하게 작동했습니다. 하지만 컴파일러가 나눌 때 잘못된 매개 변수를 사용하여 push_back()을 호출한다고 컴파일러에서 알려줍니다. 그래서 나는 그것을 푸시하고있는 객체의 타입을 참조 할 수 없다는 것을 이해합니다. 물론 동일합니다 (물론 afaik : D). 내가 맞다,

#ifndef _MYHEADER_HPP_ 
#define _MYHEADER_HPP_ 
class A{ 
public: 
    std::string someString; 
}; 

class B{ 
public: 
    std::vector<A> aList; 
public: 
    void addA(); 
}; 

#endif /* _MYHEADER_HPP_ */ 

//implementation file 

#include <string> 
#include <vector> 
#include "myheader.hpp" 

void B::addA(){ 
    A a; 
    a.someString = "Hola"; 
    // Here compiler says : Invalid arguments 'Candidates are: void push_back(const A &)' line 18 Semantic Error 
    aList.push_back(a); 
} 

AFAIK, 표준 : : 벡터는 항상 밀어 객체의 복사본을 수행하고, 그 사본은 벡터에 저장됩니다, 그래서 그것을 할당 'A'인 스택의 문제가 아니라 생각 ?

내가 뭘 잘못하고있어? 감사합니다. .

+1

어쩌면 다른 'A'정의를 참조 할 수 있습니까? –

+0

표준 라이브러리에 A 클래스가 존재하지 않는다면, 나는 생각하지 않는다 :/ –

+7

'aList'는 포인터가 아니기 때문에'aList.push_back (a);' – hmjd

답변

5

문제의 근본 원인을 찾는 데 3 시간 이상이 걸린 후 Eclipse CDT IDE에 코드에 대한 손상된 캐시 파일이 있다는 것을 발견했습니다. 따라서 명령 줄에서 컴파일하는 것이 좋았습니다. 캐시 파일을 삭제해야하고 Eclipse에서 오류가 없다고보고했습니다.

+0

답변을 수락해야합니다! :) – Ryan

관련 문제