Проблема с использованием функций в одном файле cpp в другом - PullRequest
0 голосов
/ 07 февраля 2011

У меня есть 1 файл cpp с main ().Он опирается на структуры и функции в другом (скажем, header.hpp).Структуры определены в header.hpp вместе с прототипами функций.Функции реализованы в header.cpp.

Когда я пытаюсь скомпилировать, я получаю сообщение об ошибке:

undefined reference to `see_blah(my_thing *)`

Итак, чтобы дать обзор:

header.hpp:

#ifndef HEADERDUR_HPP
#define HEADERDUR_HPP
struct my_thing{
    int blah;
};
int see_blah(my_thing*);
#endif

header.cpp:

#include "header.hpp"
int see_blah(my_thing * thingy){
    // ...
}

main.cpp:

#include <iostream>
#include "header.hpp"
using namespace std;
int main(void)
{
    thinger.blah = 123;
    cout << see_blah(&thinger) << endl;
    return 0;
}

Понятия не имею, что я делаю неправильно, иЯ не могу найти ответы.Спасибо за любые ответы, они очень ценятся!

Ответы [ 6 ]

4 голосов
/ 07 февраля 2011

Вы должны знать, что вам не хватает точки с запятой в конце определения структуры.Это означает, что он складывает две (предположительно отдельные) части вместе, и в результате вы не получаете прототип функции.

Следующее компилируется нормально (также после исправления пары других ошибок):

// main.cpp
#include <iostream>
#include "header.hpp"
using namespace std;            // <- not best practice, but irrelevant here :-)
int main(void)
{
    my_thing thinger;           // <- need this!
    thinger.blah = 123;
    cout << see_blah(&thinger) << endl;
    return 0;
}

// header.cpp
#include "header.hpp"
int see_blah(my_thing * thingy){
    // ...
}

// header.hpp
#ifndef HEADERDUR_HPP
#define HEADERDUR_HPP 
struct my_thing{
    int blah;
};                              // <- see here.
int see_blah(my_thing*);
#endif

с:

g++ -o progname main.cpp header.cpp

gcc фактически выдал ошибку с кодом, который вы опубликовали, поэтому я не уверен, почему ваш компилятор этого не сделал.Приведенная выше командная строка также важна - если вы компилируете и связываете за один шаг, вам необходимо предоставить все необходимые исходные файлы C ++ (иначе компоновщик не будет иметь доступа ко всему).

2 голосов
/ 07 февраля 2011

Ваш код в порядке.Вы просто неправильно это компилируете.Попробуйте:

g++ main.cpp header.cpp
2 голосов
/ 07 февраля 2011

Вам необходимо:

#include "header.hpp"

в вашем файле * main.cpp .

1 голос
/ 07 февраля 2011

Если вы включили header.hpp, то, вероятно, вы не связали его (header.cpp) с main.cpp.Какую среду вы используете (g ++ или VC ++)?

Редактировать: для связи в g ++ вы должны написать:

g++ main.cpp header.cpp -o program

Также в конце вашей структуры пропущена точка с запятой!

0 голосов
/ 07 февраля 2011

thinger.blah = 123; должно быть в соответствии с:

my_thing thinger = { 123 };

в дополнение к проблемам, упомянутым другими авторами.пожалуйста, обновите ваш пример, чтобы он компилировался.

0 голосов
/ 07 февраля 2011

В конце определения структуры вы пропускаете точку с запятой и смешиваете ее с методом.

...