Вы должны знать, что вам не хватает точки с запятой в конце определения структуры.Это означает, что он складывает две (предположительно отдельные) части вместе, и в результате вы не получаете прототип функции.
Следующее компилируется нормально (также после исправления пары других ошибок):
// 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 ++ (иначе компоновщик не будет иметь доступа ко всему).