Основная причина:
Вы получаете ошибку, потому что компилятор не знает / не понимает тип foo
, который вы используете в вашем файле cpp. Он может знать тип, только если он видит его определение.
Решение:
Вам нужно поместить объявление структуры в файл заголовка и включить этот файл заголовка как в заголовок, где вы объявляете функцию, так и в файл cpp, где вы ее определяете.
functions.h
struct foo{
int a;
int b;
};
extern foo foo_data;
void function(foo &);
functions.cpp
#include "functions.h"
foo foo_data;
void function(foo &foo_data) function definition reference of type foo
{
//access local foo_data
foo_data.a // should = 1
foo_data.b // should = 2
//access global foo_data
::foo_data.a = 1;
::foo_data.b = 1;
}
main.cpp
#include "functions.h"
int main()
{
//Global foo_data is accessible here now
foo_data.a =
foo_data.a =
....
}
EDIT:
Ваши комментарии предполагают, что вы хотите поделиться экземпляром foo_data
между несколькими исходными файлами, в этом случае вы должны использовать extern
, для этого я модифицировал приведенный выше пример кода, обратите внимание, что внутри function()
локальный экземпляр foo_data
будет скрыть глобальный экземпляр и, если вы хотите использовать глобальный объект, вы должны использовать его как ::foo_data
.