2017-01-09 19 views
0

나는 너무 오래 전에 내 머리를 꺾어 왔고, 무엇이 잘못되었는지를 찾을 수없는 모든 것을 연구했다.다른 파일에서 함수에 액세스하기 (C++, QT) 해결되지 않은 외부

저는 QT에서 GUI 프로그램을 작성 중이며 메인 프로그램 파일 외부의 일부 파일에는 있지만 프로젝트 내에서 몇 가지 기능이 있습니다. 구조는 다음과 같습니다.

Source files: 
main.cpp 
mainwindow.cpp 
signal.cpp 
signalparse.cpp 

header files: 
mainwindow.h 
signal.h 
signalparse.h 

신호는 일부 데이터를 저장하는 객체입니다. Signalparse는 신호를 사용하고 텍스트 파일을 구문 분석하여 신호로 읽습니다. 필자는 barebones 콘솔 응용 프로그램에서이 기능을 GUI 프로그램에 넣기 전에 테스트하여 작동 여부를 확인했습니다.

이제 내 mainwindow.cpp 파일 내 SignalParse.cpp 파일에서 ReturnSignal 함수를 호출하려고합니다.

SignalParse.h is below: 
#include<vector> 
#include <iostream> 
#include "signal.h" 

void ParseLine(std::string*); 
std::string ReturnTitle(); 
std::vector<Signal> ReturnSignal(std::string); 

내가 ReturnSignal을 선언했음을 보여줍니다. mainwindow.cpp 내부

vector<Signal> ReturnSignal(string filename) 
{ 
    //does stuff 
} 

내가 ReturnSignal에서 반환 된 벡터를 저장하기 위해

std::vector<Signal> signalList; 

를 선언 :로

내부 SignalParse.cpp 기능이 정의된다.

그때 나는 마지막으로이 함수를 호출하고 내 데이터를 반환 할 mainwindow.cpp 내부

signalList = ReturnSignal(signalFilePath); 

를 사용합니다. 주석을 달았을 때 오류가 없습니다.

mainwindow.obj:-1: error: LNK2019: unresolved external symbol "class std::vector<class Signal,class std::allocator<class Signal> > __cdecl ReturnSignal(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" ([email protected]@[email protected]@@[email protected]@@@[email protected]@@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z) referenced in function "private: void __cdecl MainWindow::on_file_open_triggered(void)" ([email protected]@@AEAAXXZ) 

나는 내 인생은 왜 늘 일을 알아낼 수 없습니다 위해 : 그러나,이 줄은 오류가 발생합니다. 누구든지 아이디어가 있습니까? 나는 지금 몇 시간 동안 찾고 있었다! 해결책을 찾으면 좀 더 일반적으로 적용 할 수있는 질문을 다시 쓰고 싶지만 지금은 완전히 혼란 스럽습니다. 고마워요. 편집

: 컴파일러를 사용하고 내가 아주 간단한 해결책을 발견 몇 가지 심각한 두통 이후의 Microsoft Visual C++ 컴파일러 12.0

+0

어떤 컴파일러를 사용하고 있습니까? 너/메이크 파일은 뭐래? –

+0

QtCreator 내에서 컴파일러를 사용하고 있습니다. 이 파일에는 포함 된 파일을 정의하는 .pro 파일이 있습니다. –

+0

컴파일러에 컴파일 할 소스 파일이 제공되지 않았거나 링커에 컴파일러에서 생성되는 중간 바이너리 파일이 제공되지 않았을 수 있습니다. –

답변

0

입니다. 커맨드 라인 컴파일러 나 Visual Studio 중 하나만 사용했기 때문에 이런 일이 발생하지 않았습니다.

해결되지 않은 외부 오류를 해결하기 위해 빌드 메뉴로 가서 프로젝트를 정리 한 다음 "qmake 실행"을 수행해야했습니다. 이 후, 해결되지 않은 모든 내선이 사라지고 프로그램이 작동했습니다.

나는이 정보를 찾기가 왜 그렇게 어려웠는지 잘 모르지만, 비슷한 장소에있는 누군가에게 도움이되기를 바랍니다.