2010-12-07 2 views
0

vector<vector<clickable> > 유형의 벡터를 채우는 데 문제가 있습니다. 컴파일러는 vector<clickable>을 push_back이 변수의 선언과 동일한 함수에서 발생하는 한 그 변수에 push_back을 되돌려 놓았지만 변수가 .h 파일로 선언되고 push_back이 클래스의 다른 함수에서 실행된다.구조체의 2D 벡터를 올바르게 푸는 데 문제가 있습니다. (C++)

다음 예제에서는 동일한 함수에서 방금 선언 된 vector<vector<clickable> >에서 push_back을 호출하고 .h 파일에서 선언 된 push_back을 호출한다는 점을 제외하고는 루프가 완전히 동일해야합니다. 어떤 작품의

예 (이 메인 함수에서, 그러나 어떤 기능으로 작동합니다.) :

vector<vector<clickable> > clicks; 
for(int i = 0; i < 10; i++){ 
    vector<clickable> click; 
    for(int j = 0; j < 10; j++){ 
      click.push_back(clickable(Rect(Point(50,50),5,10),"blar")); 
    } 
    clicks.push_back(click); 
} 

작동하지 않는 것의 예 :

Gui.h :

#include <vector> 
//... 
struct clickable { 
    Rect rect; 
    string msg; 
    bool visible; 
    clickable(Rect rectangle, string message){ 
      rect = rectangle; 
      msg = message; 
      visible = true; 
    } 
}; 
//... 
class Gui{ 
    public: 
    //... 
    void load_environment(); 
    //... 
    private: 
    vector<vector<clickable> > ship; 
    //... 
} 

Gui.cpp :

#include "Gui.h" 
//... 
void Gui::load_environment(){ 
    for(int i = 0; i < 10; i++){ 
      vector<clickable> click; 
      for(int j = 0; j < 10; j++){ 
        click.push_back(clickable(Rect(Point(50,50),5,10), 
              "blar")); 
      } 
      ship.push_back(click); 
    } 
} 
//... 

나는 그것이 내 운영자에게 과부하를주지 않는 것과 관련이있을 것이라고 생각하지만, 그것이 문제의 원인인지 또는 그것이 있다면 과부하해야하는지에 대해서는 실제로 생각하지 못한다.

편집 여기 오류의 텍스트입니다 :

Gui.cpp:47: error: no matching function for call to ‘std::vector<std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::allocator<std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::push_back(std::vector<clickable, std::allocator<clickable> >&)’ /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:602: note: candidates are: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, _Alloc = std::allocator<std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >]

+0

어떤 오류가 발생합니까? – EboMike

답변

2

오류 메시지 말한다, 효과, 그것은 실제로 vector<vector<string> >입니다에 당신이 push_back하려는 벡터를 생각하는 것이, 기대했던대로 vector<vector<clickable> >이 아닙니다.

깨끗한 재 구축 만하면됩니다.

+0

와우, 나는 정말 바보 같았다. 나는'vector >'(또한 너무 많은 정보를 피하기 위해 붙여 넣은 코드에서 생략 한)'ship '이라고도 부른다. 아직 아무것도 사용하지 않았기 때문에 잊어 버렸습니다. 슬픈 부분은 내가 ~ 24 시간 동안이 문제에 의문을 제기하고있다. – scott77777

관련 문제