2013-06-12 3 views
1

Я хотел узнать, используя файлы заголовков. и я получил ошибку. Вот мой код:Как использовать файлы заголовков?

printmyname.h:

void printMyName(); 

printmyname.cpp:

#include "printmyname.h" 

void printMyName() { 
    cout << "omer"; 
} 

try.cpp (главный файл):

#include <iostream> 
#include "printmyname.h" 
using namespace std; 


int main() { 
    printMyName(); 

    return 0; 
} 

Произошла ошибка:

undefined reference to `printMyName()` 

В чем проблема?

+2

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

+0

какая у вас платформа? –

+1

вы должны дать команду, которую вы использовали до сих пор, чтобы скомпилировать свой код. Ваш код в порядке, это то, как вы скомпилируете его, что есть проблема! – zmo

ответ

3

Undefine reference не имеет никакого отношения к вашему файлу заголовка в этом случае. Это означает, что компоновщик не может найти реализацию printMyName, которая находится в printmyname.cpp. Если вы используете g++, вы должны попробовать:

g++ try.cpp printmyname.cpp -o yourBinaryName 

Если вы используете Makefile, следует добавить зависимость (printmyname.cpp) правильно для try.cpp.

Edit:

Как @zmo предложить в своем комментарии:

вы также можете сделать это через два раза компиляции (более подходящий с Makefiles):

g++ -c printmyname.cpp 
g++ try.cpp printmyname.o -o yourBinaryName 
+0

вы также можете сделать это с помощью двухкратной компиляции (более подходящей с Makefiles): 'g ++ -c printmyname.cpp'' g ++ try.cpp printmyname.o -o tryprintmyname' и дать лучшее имя, чем' a.out' :-) – zmo

+0

Да, спасибо @zmo – StarPinkER

-6

Вы должны добавить код/​​определение в printMyName.cpp внутри printMyName.h только.

void printMyName(); 
{ 
    cout << "omer"; 
} 
+4

Плохой совет (хотя он и исправит проблему). –

+1

OP хочет узнать, как правильно использовать заголовки на C++, и вы советуете ему сделать одну вещь, которая идет против модульности! – zmo

+0

Вам также понадобится сделать это inline, если вы это сделали – doctorlove

0

Если вы используете Windows, вам также необходимо добавить printmyname.cpp в свой проект. Рассмотрим добавление include guard to your header

#ifndef PRINTMYNAME_INCLUDED 
#define PRINTMYNAME_INCLUDED 

void printMyName(); 

#endif 

Вам также нужно переместить #include <iostream> и using namespace std; от try.cpp к файлу printmyname.cpp.

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