2017-01-09 14 views
0

Я слишком долго бил головой об этом и исследовал все, что я не могу найти, что не так.Доступ к функции из другого файла (C++, QT) Неразрешенный внешний

Я пишу программу GUI в QT и имею несколько функций в некоторых файлах, внешних по отношению к основному программному файлу, но в рамках проекта. Структура выглядит примерно так:

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

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

Сигнал - это объект, в котором хранятся некоторые данные. Signalparse использует сигнал, анализирует текстовый файл и считывает его в сигнал. Я тестировал эту функциональность в консольном приложении barebones перед тем, как поместить ее в свою программу GUI, поэтому я знаю, что она работает (работает).

Теперь я пытаюсь вызвать функцию ReturnSignal из файла SignalParse.cpp внутри файла mainwindow.cpp.

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.

Внутри SignalParse.cpp функция определяется следующим образом:

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

Внутри mainwindow.cpp я объявить

std::vector<Signal> signalList; 

хранить возвращенный вектор из ReturnSignal.

Затем я использую

signalList = ReturnSignal(signalFilePath); 

внутри mainwindow.cpp, наконец, вызвать эту функцию и возвращать мои данные. При комментировании ошибок нет. Однако эта строка вызывает ошибку:

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) 

Я не могу на всю жизнь понять, почему это не работает. У кого-нибудь есть идеи? Я искал часы сейчас! Я хотел бы переписать вопрос, чтобы быть более общеприменимым, если я найду решение, но на данный момент я полностью в тупике. Большое спасибо.

EDIT: Компилятор используется в Microsoft Visual C++ Compiler 12.0

+0

Какой компилятор вы используете? Что вы говорите/makefile? –

+0

Я использую компилятор в QtCreator. Он имеет .pro-файл, который определяет, какие файлы включены. –

+0

Возможно, вашему компилятору не даны исходные файлы для компиляции, или вашему компоновщику не предоставляются промежуточные двоичные файлы, которые генерирует компилятор. –

ответ

0

После некоторых серьезных головных болей я нашел очень простое решение. Только на самом деле использовали компиляторы командной строки или Visual Studio, это не произошло со мной.

Оказалось, что для устранения большинства нерешенных внешних ошибок, с которыми я имел дело, мне пришлось просто зайти в меню сборки, очистить мой проект, а затем «Запустить qmake». После этого все мои нерешенные внешние исчезли, и моя программа сработала.

Я не знаю, почему так сложно найти эту информацию, надеюсь, это поможет кому-то в подобном месте.

 Смежные вопросы

  • Нет связанных вопросов^_^