벡터에 레퍼런스를 저장하려면?

std::vector<int &> hello; 같이 int의 레퍼런스를 저장하려고 하면

"error C2528: 'pointer' : pointer to reference is illegal" 에러가 뜹니다.

제가 포인터를 잘 못써서 레퍼런스로 하려는 건데 왜 이런 에러가 뜨는 거죠? 꼭 포인터를 써야 하나요?

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    C++11미만의 컴파일러에서

    containter 원소의 type은 값을 할당할 수 있어야(assignable) 합니다. 그런데 레퍼런스는 한 번 초기화되면 다른 값을 레퍼런스 할 수 없으므로 assignable하지 않기 때문에 컴파일 에러가 발생하는 것입니다.

    C++11부터

    C++11부터는 std::reference_wrapper를 써서 레퍼런스를 저장할 수 있습니다.

    밑의 예제는 레퍼런스를 vector에 저장해 vector의 원소를 이터레이팅 합니다.

    #include <iostream>
    #include <vector>
    
    class MyClass{
    public:
        int x;
        MyClass(int y): x(y) {}
        void func(){
            std::cout<<"I am func" << std::endl;
        }
    };
    int main(){
        std::vector<std::reference_wrapper<MyClass>> vec;
        MyClass obj1(2);
        MyClass &obj_ref1=std::ref(obj1);
        vec.push_back(obj_ref1);
        for( auto ob : vec)
        {
            std::remove_reference<MyClass&>::type(ob).func();
            std::cout<<std::remove_reference<MyClass&>::type(ob).x<< std::endl;
        }
    
    }
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.