2009-08-14 7 views
0

누구나 pls가 Qt 프로그램에서 일반 C++ 클래스를 사용할 수 없다고 말할 수 있습니까? QObject를 상속되지 않은 클래스가있는 경우 컴파일러는 나에게라는 연결 오류,Qt에서 일반 C++ 클래스를 사용할 수없는 이유

error LNK2019: unresolved external symbol _main referenced in function [email protected] 

내가 VS2005와 (나 자신에 의해 컴파일) Qt는 4.5.2을 사용하고 있습니다를 제공합니다. Pls이 해결하는 데 도움이!

편집 :

예 ...

//UnitManager.h

class UnitManager 
{ 
public: 
//-Some code 
}; 

//CivilizationViewer.h

class CivilizationViewer : public QMainWindow 
{ 
Q_OBJECT 
//-some code 
}; 

// 주

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    CivilizationViewer w; 
    w.show(); 
    return a.exec(); 
} 

CivilizationViewer.h에 UnitManager.h를 포함하면 컴파일러에서 오류가 발생합니다. (main.cpp 컴파일러에 UnitManager.h를 포함하면 오류가 발생합니다.)

+0

이 오류를 제공하는 클래스의 예를 볼 수 있습니까? 클래스를 다음과 같이 선언하십시오. className; 또는 내 주문의 변경 –

+0

QObject에서 파생되지 않은 클래스를 사용하는 것이 완벽하게 허용됩니다. 코드에 다른 문제가 있다고 의심됩니다. –

+0

자신의 WinMain을 정의 했습니까? 일반적으로 Qt 앱에서는 그렇게하지 않습니다. –

답변

8

오류는 사용하는 클래스와 관련이 없습니다. 애플리케이션에 설정 한 진입 점과 관련이있는 것 같습니다. 보통 Qt 프로그램에서 WinMain() 대신 main()을 사용하려고합니다. 구성이 올바르게 설정되어 있는지 확인하십시오.

질문에 약간의 코드가 포함되었습니다. 그게 다야? 그렇다면 주요 기능이 누락되었습니다.

+0

안녕하세요! 답변 해 주셔서 감사합니다. 헤더 파일 (일반 C++ 클래스 포함)을 추가 할 때까지 모든 것이 완벽하게 진행되었습니다. 그 C++ 클래스도 Qt없이 작업하고있었습니다. 또한 vs2005 qt 통합으로 열리는 기본 프로젝트입니다. – Morpheus

+0

짧은 코드를 사용해 죄송합니다. 주 코드도 추가했습니다. – Morpheus

+2

그래서 #include "UnitManager.h"라인 만 제거하면 빌드가 성공하게됩니까? 그것은 정말로 이상하게 보인다. 나는 몇 가지 제안을 할 수있다. 먼저, UnitManager 클래스의 끝 부분에 세미콜론이 있는지 확인하십시오. (궁금한 사항은 아닙니다.) 둘째, 프로젝트가 Windows 프로그램이 아닌 콘솔 프로그램으로 구성되어 있는지 확인하십시오. Windows 프로그램 인 경우 Visual Studio는 main 대신 WinMain을 찾습니다. –

0

qtmain.lib (디버그 빌드의 경우 qtmaind.lib)와 연결해야하는 것처럼 보입니다. 이 라이브러리는/subsystem : windows를 선언 할 때 필요한 WinMain 함수를 제공합니다.

출처 : http://lists.trolltech.com/qt-interest/2005-12/thread00170-0.html 당신이 제대로 QT 라이브러리를 포함하지 않는 것 같습니다

+0

안녕하세요! ans에 감사드립니다. qtmaind.lib가 이미 추가되었습니다. 이것은 정말로 이상합니다. main.cpp에 헤더 파일을 추가 할 수없는 이유는 무엇입니까 ?? – Morpheus

0

난 당신이 실제로는 Win32 응용 프로그램을 만들 생각합니다. 에 대한 주를 교체하려고 :

int _tmain(int argc, _TCHAR* argv[]){ 
    your code 
} 

이 오류 MSG를보고, 나는 Qt는이 문제였다 생각하지 않을 것입니다. Visual Studio Qt 통합을 설치 했습니까? 그것을 시도하고 새로운 Qt 프로젝트를 만드십시오.

+0

안녕하세요! 당신은 내게 대답을 따르는 것에 대한 당신의 의견을 줄 수 있습니까? – Morpheus

1

모두에게 감사드립니다. 오류를 발견했습니다. UnitManager.h에는 SDL.h가 있으므로 SDL.lib 및 SDLmain.lib를 추가해야합니다 (올바른 것인가?). SDLmain.lib의 main에 대한 다른 정의가 있습니다. 그래서, main의 정의 사이에 충돌이있었습니다. 따라서 qtmaind.lib를 추가하기 전에 SDLmain.lib를 추가했습니다. 그런 다음 경고 만하면 문제가 해결됩니다.

warning LNK4098: defaultlib 'msvcrt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library 

경고 란 무엇입니까? 나는 경고를 무시할 수 있지만, 나는 그것을 알기를 좋아한다! 감사합니다.

+0

실제 오류는 Chickencha에 의해 해결되었습니다. – Morpheus

관련 문제