Извините за неконкретный заголовок вопроса. Короче, вот что у меня есть:
файл1.cpp
#include "file1.h"
int main()
{
somefunc();
}
файл1.h
#pragma once
#include "file2.h"
int somevar;
file2.cpp
#include "file2.h"
void somefunc()
{}
файл2.h
#pragma once
#include "file1.h"
void somefunc();
Это хорошо компилируется с GCC, но дает мне «multiple definition of somevar
» во время компоновки.
Что не так?
#pragma once
или, возможно, добавление охраны поможет. 12.07.2013#pragma once
и включают охранников. Они не позволяют включать один и тот же файл заголовка несколько раз в одну и ту же единицу перевода (файл .cpp). Они не могут, не могут и не должны мешать вам включать его в несколько разных файлов .cpp, что в данном случае вызывает проблему. 12.07.2013extern
только ухудшит ситуацию? 12.07.2013extern int somevar;
в заголовке. У вас естьint somevar;
только в одном файле cpp. 12.07.2013