2013-06-28 3 views
1

()을 사용하여 개체를 만들 때보다 명시 적으로 인스턴스 변수에 액세스하려고하면 컴파일 타임 오류가 발생하지만 그렇지 않은 경우 코드가 컴파일되어 예상대로 실행됩니다. 또한이 문제는 기본 생성자에만 적용됩니다. 이유를 이해하고 싶습니다.오브젝트 b(); 및 개체 b;

using namespace std; 
#include <iostream> 

class Student { 

    public: 

    int gpa; 

    Student() { 
     gpa = 4; 
    } 

    Student(int x) { 
     gpa = x; 
    } 

}; 

int main() { 

    Student zero; 
    Student sally(2); 
    Student jack(); 

    cout << zero.gpa << endl; //prints 4 
    cout << sally.gpa << endl; // prints 2 
    cout << jack.gpa << endl; //error: request for member 'gpa' in 'jack', which is of non-class type 'Student()' 

} 
+0

왜 새로운 사용 해달라고? –

+0

이것은 문제를 해결하기위한 문제가 아닙니다. 왜 내가 처음에 오류가 발생하는지 이해하고 싶습니다. –

+4

@huseyintugrulbuyukisik 왜 그가해야합니까? 자동 수명은 적용될 때마다 동적 수명을 상회합니다. – delnan

답변

8

문제는 Student jack();는 반환 형식으로 Student와 함수를 선언한다는 것입니다. 그것은 당신이 기대하는대로 그 클래스의 객체를 선언하지 않습니다.

+0

오오! 너무 미묘합니다. 나는 그것이 그걸로 뭔가있을 줄 알았지 만, 확실하지 않았습니다. 감사. –

6
Student jack(); 

학생을 돌려주고 인수를 취하지 않는 함수를 선언합니다. 물건이 아닙니다!

gotw

3

더 참조 ") (개체 B를;" Object b()가 Object 유형의 객체를 반환하는 함수 b()를 선언하고 "Object b;" Object 유형의 변수 b를 정의합니다.

아니요, 명확하지 않습니다. 그리고 C++, Java 및 C# 사이를 전환하면 여전히 계속 물러납니다. :-)

2

오브젝트 b(); 및 개체 b;

차이점은 존재하는 개체 대신 선언 된 함수로 C++이 해석하기 때문입니다.

Object b; 

는 기본 생성자에 의해 생성되는 클래스 Object의 대상 b입니다.
Object b(); 

Object 클래스의 객체를 반환 (다른 곳에서 정의 된 것이다) 선언되는 함수 b(), 파라미터를 사용하지 않고있다.

희망이 도움이됩니다.

0

나는이

수준의 학생을 시도 할 것이다 {

공개 :

int gpa = 4; 

Student() { };