tryME 関数を使用して C++ クラスを定義するこれら 2 つの単純なファイルがあります。
______myclass.h________________
#pragma once
void tryME()
{
}
class myclass
{
public:
myclass(void);
myclass(void);
void callTryME();
};
_________myclass.cpp____________
#include "myclass.h"
myclass::myclass(void)
{
}
myclass::~myclass(void)
{
}
void myclass::callTryME()
{
tryME();
}
これにより、エラーが発生します
1>myclass.obj : エラー LNK2005: "void __cdecl TryME(void)" (?TryME@@YAXXZ) は既に tryout.obj で定義されています 1>C:\tryout.exe : 致命的なエラー LNK1169: 1 つ以上の多重定義されたシンボルが見つかりました
tryME() 関数を static として宣言すると、問題は解決します。しかし、なぜ?
.h ファイルが .cpp ファイルに含まれてから (翻訳単位に) コンパイルされ、静的変数と関数が含まれている翻訳単位全体に表示されることはわかっていますが、プログラムが機能しないのはなぜですか「静的」キーワードなしですか?関数 tryME は、クラス外で「グローバル」であるべきであり、したがって可視である必要があります。それは正しくありませんか? 呼び出しは tryME() の前に「this->」を置きますか?