2014-03-06 2 views
0

저는 C++에 약간 새로운데, 대부분 임베디드 C 개발을 다루지 만 수업을 많이하지 않습니다. Qt 예제 헤더 파일에서 이것을 보았습니다 :C++ 클래스 형식 - Qt 생성자 5.2.1

class QUdpSocket; 

이 클래스 생성자입니까? 나는 QUdpSocket 클래스가 헤더 파일에 있고 QAbstractSocket 클래스의 일부라는 것을 알고 있지만 이런 식으로는 결코 발생하지 않았다. 그것은 나를 조금 혼란스럽게합니다. 누군가 이것에 대해 약간의 생각을 할 수 있습니까? 그것은 앞으로 선언이다 - 나는 새로운 생성자 아닌 그

+0

C를 안다면 앞으로 선언문을 들어야 만합니다. –

+1

이것은 생성자가 아닙니다. QUdpSocket 클래스의 전방 선언입니다. http://stackoverflow.com/a/4757718/2296458 – CoryKramer

+0

죄송합니다. C에서 사용하지 않은 사람이 있습니다. 간단한 구조 일 수도 있지만 클래스는 절대 사용하지 마십시오. 내가 쓴 대부분은 수업을 요구하지 않았다. 통찰력에 감사드립니다! –

답변

2

고유 이름이 불완전 (전달) 선언입니다. 불완전한 선언으로 클래스 멤버가 정의되어 있지 않습니다. 클래스를 완전히 정의해야만 객체를 선언하거나이 클래스의 멤버를 참조 할 수 있습니다.

그러나이 구조체에 대한 포인터를 만들 수는 있지만 클래스의 크기가 필요하지 않은 경우에만 가능합니다.

Inclomplete 선언은 컴파일러에게이 클래스가 나중에 정의 될 것이고 다른 클래스/함수에서 사용할 것을 제안하는 데 사용됩니다. 이 선언은 두 클래스가 있고 그 중 하나가 다른 클래스의 객체를 사용하는 경우 그 목적으로 사용됩니다.

struct first; 

struct second{ 
    first* f; 
} 

struct first{ 
    second* s; 
} 
+0

고마워!이 질문을 게시 한 이유는 (내가 위에서 언급 한)이 클래스의 수업을 처음으로 사용하기 때문입니다. 내 임베디드 함수 중 일부는 개발 라이브러리에 포함되어 있지만, 내가 작성한 코드는'udpSocket = new QUdpSocket (this); '이고 컴파일러는 "this"포인터를 사용할 수 없다고 말했다. 클래스 헤더를 포함하고 모든 것을 미리 구성 했음에도 불구하고 클래스 멤버입니다. 내 머리글의 시작 부분에'class UdpSocket; '을 추가하여 그것을 수정했습니다. 그리고 내 코드도 훌륭하게 실행됩니다. –

1

:-)

감사합니다 ... C에 ++ 및 학습, 말했듯이. 나는 이것이 헤더 파일의 맨 위에 어딘가에 나타나는 것으로 추측하고있다. 프로그래머는 컴파일러가 나중에 클래스의 실제 내용을 선언하기 전에 클래스 이름이 인식되지 않기 때문에 오류를 피하기 위해이 클래스의 존재를 조기에 인식하도록 만듭니다.

+0

클래스가 들어있는 헤더 파일을 포함 시켰습니다. 내 코드에는'udpSocket = new QUdpSocket (this);'이라는 줄이 있었고 클래스에 헤더를 포함 했음에도 "this"를 사용할 수 없다는 말을 들었습니다. - 클래스 QUdpSocket; '헤더 파일의 시작 부분에. 다시 한 번 감사드립니다! –

0

이것은 앞으로의 선언이며 google에 관한 내용입니다.

1

이것은 전방 선언입니다. 생성자는 단지 하나의 메소드 일뿐입니다. C++의 forward 선언은 주어진 시점에 실제 구현을 지정하지 않고 메소드와 클래스를 선언 할 수있게 해줍니다. 필요하다면 나중에 남겨 둡니다. 이는 코드의 유지 보수성을 개선하고 특정 상황에서 주기적 종속성 및 성능과 관련된 문제를 해결하는 데 도움이 될 수 있습니다.

이를 통해 이동 Forward declaration

을 약 C++ 클래스를 참조하십시오. 왜냐하면 이것은 C++ 개발을위한 아주 기본적인 개념이기 때문입니다.

+0

정보 주셔서 대단히 감사합니다! 도움이되었습니다. 언급했듯이, 이것은 클래스 사용에 관한 나의 처음입니다 ... 느린 따라 잡기. 이것은 정말로 내가 훨씬 더 많이 이해하는 것을 도왔다. .. 고마워!! –

+0

나는 행복하다, 나는 도울 수 있었다 : –

0

감사합니다. 프로그램에서 함수를 사용하여 전방 선언을 사용했습니다. 나는 그들이 무엇을 부르는지 알지 못했다. 모든 답변 주셔서 감사합니다, 정보 주셔서 감사합니다, 모두에게 건배!