Имя, имеющее область пространства имен (3.3.5) имеет внутреннюю связь, если это имя
[*]объекта, ссылки, функции или шаблона функции, которые явно объявлены статическим или,
[*]объект или ссылка, которая явно объявлена как const и не объявлена явно как extern и ранее не объявлена как имеющая внешнюю связь; или
[*]член данных анонимного союза.
Но почему при компиляции следующего кода возникает конфликт нескольких определений?
Код: Выделить всё
// a.cpp
const int& a = 1;
int main()
{
return 0;
}
// b.cpp
const int& a = 1;
Код: Выделить всё
$ g++ a.cpp b.cpp
/tmp/ccb5Qi0M.o:(.bss+0x0): multiple definition of `a'
/tmp/ccD9vrzP.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
Код: Выделить всё
// a.cpp
const int a = 1;
int main()
{
return 0;
}
// b.cpp
const int a = 1;
Подробнее здесь: https://stackoverflow.com/questions/227 ... nkage-in-c