考慮下面的代碼:流
//header.h
#pragma once
class A
{
public:
A();
void f();
};
//header.cpp
#include "header.h"
A::A(){}
void A::f(){}
//main.cpp
#include "header.h"
int main()
{
A a;
a.f();
}
編譯器,如何知道哪兒是constructor
和f
函數的聲明,因爲只有在header.h
列入main.cpp
?以及爲什麼不能找到相同的功能,當class A
是模板?
函數(包括構造函數)可以用符號表示。鏈接器查找所有符號,並用實際的代碼地址替換它們。 –
[編譯/鏈接過程如何工作?]可能的重複(http://stackoverflow.com/questions/6264249/how-does-the-compilation-linking-process-work) –
對於你最後一個問題,請參見[爲什麼只能在頭文件中實現模板](http://stackoverflow.com/q/495021/597607) –