2016-09-04 3 views
-4

다음과 비슷한 코드를 컴파일하려고하면 제목에 오류 메시지가 표시됩니다.클래스 std :: vector <Object>에는 'x'라는 멤버가 없습니다

class Object{ 
public: 
    Object(){ 
    //Something 
    } 
    void x(){ 
    //Something 
    } 
} 

void function(std::vector<Object>* things){ 
int someNumber; 
//Some algorithm to get the value of someNumber. 
things->resize(someNumber); 
for(int i=0;i<someNumber;i++){ 
    things[i].x(); 
} 
} 

int main(){ 
vector<Object> things; 
function(&things); 
return 0; 
} 

무엇이 문제의 원인 일 수 있습니까? 당신이 벡터의 배열 같은 things을 치료한다 []를 사용할 때

+1

** -이 1 ** 때문에 **하지 실제 코드 **. 재현 가능한 예가없는 것으로 결론 지었다. 즉, 호출없이 멤버 함수'x'를'o.x'로 참조 할 수 없습니다. –

+1

'things'는 포인터입니다. 'std :: vector '에 대한 포인터입니다. 따라서'things [i]'는'std :: vector '입니다. 'std :: vector '에는'x'라는 이름의 필드가 없습니다. 'Object'가'x()'라는 멤버 함수를 가지고 있다는 사실은 무의미합니다. 판타지 코드 대신 실제 코드를 게시하면 어쩌면 누군가가 이것을 할 올바른 방법을 알려줄 것입니다. –

+0

대단히 죄송합니다. 나는'things [i] .x()'라고 쓰려고했다. – Letokteren

답변

5

당신은 그래서 당신의 벡터에 포인터를 전달하고 있습니다.

void function(std::vector<Object>* things) 
{ 
    things[0]; // element of array of vectors (vector<Object>) 
} 

참조하여 벡터를 전달하십시오 : 당신이 포인터에 []를 사용할 때 C++에서

void function(std::vector<Object>& things) 
{ 
    things[0]; // element of passed in vector (Object) 
} 

당신이 그 시작 포인터로 표시되는 배열에 액세스하는 가정 .

귀하의 경우에는 배열 벡터를 가지고 있고 []이 해당 배열에서 벡터 중 하나를 선택한다고 가정합니다.

vector<Object>* things; 

(*things)[0]; // dereference the pointer then access the elements 
+0

그것은 내가 필요한 것입니다. 고마워요! – Letokteren

1
void function(std::vector<Object>* things){ 
int someNumber; 
//Some algorithm to get the value of someNumber. 
things->resize(someNumber); 
for(int i=0;i<someNumber;i++){ 
    things[i].x(); 
} 
} 

things 포인터입니다 :

당신은 당신이 []를 사용하기 전에 지시 또는 포인터 역 참조 참조하여 벡터 에 전달해야하므로 벡터의 요소에 액세스 할 수 []를 사용하려면 . 포인터 things[i]은 그래서 당신이해야 할 노력 것이 아니다 *(things+i) 동일 들어, 필요 중 하나

(*things)[i].x(); 

이상의 자세한 정보 :

things->operator[](i).x(); 
관련 문제