2016-07-06 2 views
1

나는 많은 다른 질문과 답변을 보았으며 누구도 같은 질문을하는 것 같지 않습니다.같은 클래스의 멤버에 대한 참조를 선언하는 방법은 무엇입니까?

클래스 내에서 변수에 대한 참조를 만들려고합니다. 필자가 작성한 큰 프로그램의 일부를 꺼내 작은 파일 인 test.cpp에서 격리했습니다. 내 문제는 내가 변수를 참조와 함께 사용하는 방법과 관련이 있다고 생각했지만 큰 메시지에서와 같은 메시지가 나타났습니다.

#include <iostream> 

class Test { 
public: 
    int test; 
    int& rtest = test; 
}; 

int main() { 
    std::cout << "Enter an integer: "; 
    std::cin >> Test.rtest; 
    std::cout << "\n" << Test.rtest << "\n"; 
    return 0; 
} 

나는이 메시지를받은 :

warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 
    int& rtest = test; 

In function ‘int main()’: error: expected primary-expression before ‘.’ token 
    std::cin >> Test.rtest; 

error: expected primary-expression before ‘.’ token std::cout << "\n" << Test.rtest << "\n"; 

가 왜이 무엇입니까 여기

내 코드? 내가 할 수있는 일이 가능합니까? 그렇다면 어떻게 할 수 있습니까? 당신이로 활성화 -std=c++11 컴파일러 플래그가없는 한

int main() { 
    Test t; // <<<<<<<< 
    std::cout << "Enter an integer: "; 
    std::cin >> t.rtest; 
    std::cout << "\n" << t.rtest << "\n"; 
} 

은 또한 당신이 적절한 생성자의 참조를 초기화해야합니다

답변

4

warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 int& rtest = test;

당신은 그렇지 않으면 컴파일러 플래그 -std=c++11을 통과해야 그 방법으로 클래스 멤버를 초기화 할 수 없도록하는 이전 버전의 C++가 기본값으로 사용됩니다. . 연산자 클래스의 예를가 아닌 클래스 자체를 (::가 어떻게 될지 그건) 원하기 때문에

In function ‘int main()’: error: expected primary-expression before ‘.’ token std::cin >> Test.rtest; error: expected primary-expression before ‘.’ token std::cout << "\n" << Test.rtest << "\n";

입니다. 예 : Test test; 그리고 대신 test.rtest을 사용하십시오.

+0

플래그를 g ++에 전달하면 작동하는 방식을 찾는 데 몇 분이 걸렸습니다. –

3

당신은 클래스의 비 정적 멤버에 액세스 할 수 Test의 인스턴스가 필요 오류 메시지가 말한다 :

class Test { 
public: 
    int test; 
    int& rtest; // Nope! = test; 

    Test() : test(), rtest(test) {} // <<<<<<<<<<<<<<<<<< 
}; 
+0

좋은 답변입니다. 컴파일러 플래그를 공유해 주셔서 감사합니다 – Drew

관련 문제