2015-11-06 2 views
-1

У меня есть 2 cpp и 3 файла заголовка в моем проекте. Когда я их компилирую в VS, он работает плавно, и я не получаю сообщение об ошибке. Но когда я пытаюсь скомпилировать его на SSH сети по этой линии:Компилятор не видит мою основную функцию (Неопределенная ссылка на главную)

g++ -o program.cpp lineoperations.cpp customer.h transaction.h lineoperations.h 

Он говорит:

In function `_start': 
(.text+0x20): undefined reference to `main' 

Не говори «не забудьте написать основную функцию», потому что это уже есть и мой проектные работы на VS. Что делать тогда?

Вот часть, относящаяся к моим кодам. Program.cpp до main:

#include <iostream> 
#include <cstdlib> 
#include <iomanip> 
#include <ctype.h> 
#include <cstring> 
#include <cstdio> 
#include "lineoperations.h" 
using namespace std; 

line bankline; 
bool operate(char); 
void search(char[]); 
void add(char[]); 
void removee(char[]); 
void transaction(); 
void printline(); 

int main(){ 
    bankline.create(); 
    bool end = false; 
    while (!end) { 
     end = bankline.decideFunction(); 
    } 
    bankline.close(); 
    return EXIT_SUCCESS; 
} 

Это продолжается, но нет необходимости вставлять их, я думаю. Если вам нужно посмотреть другие файлы cpp или файлы заголовков, я также их вставляю.

+3

Можете ли вы предоставить [mcve]? – NathanOliver

+0

Возможно ли, что у вас есть #ifdef, который исключает main() из компиляции, когда вы не компилируете в VS? –

+1

Многие вещи могли пойти не так. Если этот ответ не кажется особенно удовлетворительным, отправьте дополнительную информацию и да, укажите MCVE. –

ответ

5

Команда:

g++ -o program.cpp lineoperations.cpp customer.h transaction.h lineoperations.h 

говорит g++ скомпилировать и скомпоновать файлы:

lineoperations.cpp customer.h transaction.h lineoperations.h 

и выход исполняемая программа под названием program.cpp.

Это терпит неудачу с ошибкой сцепления вы наблюдали, потому что main определяются в program.cpp, что вы не составитель или ссылки.

Попробуйте вместо этого:

g++ -o program program.cpp lineoperations.cpp customer.h transaction.h lineoperations.h 

или если вы на Windows:

g++ -o program.exe program.cpp lineoperations.cpp customer.h transaction.h lineoperations.h 

И BTW, нет необходимости перечислять файлы заголовков в командной строке. Я полагаю, они включены в файлы .

+0

мне это помогло. Я избавился от undef. ссылка ошибка. У меня есть куча ошибок «multiple definiton» прямо сейчас, но это не связано с этим сообщением, я думаю. Благодаря! Кстати, источник этих ошибок с несколькими определенными ошибками, может быть, потому, что мы дважды объявили программу? программа и program.cpp ?? –

+1

Технически возможно, что он хочет скомпилировать файлы .h как отдельные единицы перевода, но это очень странно и противоречит соглашению об именах файлов на языке C++. В конце концов, это либо ненужно, либо совершенно неправильно. – SirGuy

+0

@K.Язоглу. Вы не «объявили программу дважды». Ваши множественные ошибки определения - это не связанная проблема, которую вы, возможно, захотите сделать предметом другого вопроса. Вы также можете [принять] (http://stackoverflow.com/help/accepted-answer) мой ответ на этот вопрос. –

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