我不太清楚標準中的這一點。說我有三個文件是這樣的:內聯限定詞源於原型還是定義?
foo.h中
#include <iostream>
inline void foo();
void foo()
{
std::cout << "Foo" << std::endl;
}
Foo.cpp中:
#include "foo.h"
void baz();
int main()
{
baz();
foo();
}
bar.cpp
#include "foo.h"
void baz()
{
foo();
}
現在,foo的定義將被編譯爲編譯單元foo.o和bar.o.如果我理解正確,則內聯函數將避免鏈接器相互碰撞。 G ++編譯和鏈接本就好了,但鏗鏘++ 2.8我得到這個錯誤:
/tmp/cc-7RdmYP.o: In function `foo()':
bar.cpp:(.text+0x50): multiple definition of `foo()'
/tmp/cc-LW3id3.o:foo.cpp:(.text+0x50): first defined here
collect2: ld returned 1 exit status
看來,鐺++沒有看到void foo()
作爲一個內聯函數。但是,如果我將內聯添加到定義中,它也可以正常工作。
我是否需要添加內聯到void foo()
以便將它看作內聯函數,還是這是一個鏗鏘聲錯誤?
我認爲你的意思是「定義」,而不是「聲明」。 – Maxpm 2011-02-07 18:24:32
啊,是的,我傾向於混淆那些...;) – Maister 2011-02-07 18:25:37
這是一個有趣的問題。 – 2011-02-07 19:25:11