Non sono abbastanza sicuro di questo negli standard. Dire che ho tre file come questo:Il qualificatore in linea deriva dal prototipo o dalla definizione?
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();
}
Ora, la definizione di foo verrà compilata in entrambe le unità di compilazione foo.o e bar.o. Se ho capito bene, avere funzioni integrate eviterà la collizione del linker. G ++ compilato e collegamenti questo bene, ma con clang ++ 2.8 ottengo questo errore:
/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
Sembra che clang ++ non vede void foo()
come funzione inline. Tuttavia, funziona bene quando aggiungo anche alla definizione.
Devo aggiungere in linea a void foo()
anche qui per averlo visto come una funzione inline, o si tratta di un bug di clang ++?
Penso che tu intenda "definizione", non "dichiarazione". – Maxpm
Ah, sì, tendo a mescolare quelli ...;) – Maister
Questa è una domanda interessante. –