2

次のコードを検討してください。

header.h 内

#pragma once

class someClass
{
public:
    void foo();
};

header.cpp 内

#include "header.h"

inline void someClass::foo(){}

main.cpp で

#include <iostream>
#include "header.h"
using namespace std;

int main()
{
    someClass obj;
    obj.foo();
}

ここで、foo 関数が header.cpp でインラインとして定義されているため、リンク エラーが発生します。'inline' キーワードを削除すると、コンパイルと実行はエラーなしで続行されます。

この「インライン」関数でリンク エラーが発生する理由を教えてください。

4

1 に答える 1

3

あなたが書いたように、インラインは現在のファイルスコープに適用されます。インライン関数がヘッダーにある場合、そのヘッダーは cpp ファイルに含まれており、そのファイルのスコープで使用されている場所で関数がインライン化されるため、問題はありません。この場合、関数は定義されている場所でのみインラインとして使用でき、クラス内の通常のメンバー宣言を除いて、他の cpp ファイルには表示されないため、リンク エラーが発生します。

インラインにしたい場合は、ヘッダーにコードと inline キーワードを追加します。

于 2014-04-20T17:10:29.623 に答える