私は、ヘッダファイルで宣言されたテストクラスを別のファイルで定義しています。 Windowsでは異なるクラスをコンパイルする必要があるので、私は#if defined (_WINDOWS_)
を使います。 #if defined (_WINDOWS_)
を含むcppファイルをコンパイルすると、ファイルは別のファイルで定義されていても、シンボル_WINDOWS_
が定義されていないかのようにコンパイルされます。コンパイル時のシンボルは#定義されていましたが、#ifdefはそれを見ません
Error Code : error lnk2019 unresolved external symbol public
ソースコード
// test.h
class Test
{
public:
#if defined (_WINDOWS_)
void printwindow();
#endif
void notwindows();
};
//test.cpp
#include "test.h"
#if defined (_WINDOWS_)
void Test::printwindow()
{
cout << "i am windows ";
}
#endif
void test::notwindows()
{
cout << " not windows " ;
}
//main.cpp
#include "windows.h"
#include "test.h"
void main()
{
test t1 ;
t1.printwindow() // OK I have declared function so my _WINDOWS_ is available but when i run it i get
}
Error Code : error lnk2019 unresolved external symbol public
注:私は直接関数を定義する場合、それは何の問題
// test.h
class Test
{
public:
#if defined (_WINDOWS_)
void printwindow(){couT << "i am window" }
#endif
void notwindows();
};
なしで動作し、私は、コードをコンパイルすると、私は次のエラーを取得しています
しかし、私はこの方法が嫌いです。私はそれらを別々のファイル(hとcpp)で定義する方が好きです。
申し訳ありませんが、この質問は意味がありません。 –
@CodyGray:彼は質問をするために機械翻訳者を使わなければならなかったようです。私はそれを見て、彼はWindowsでコンパイルするときにあるクラスにある特定の追加機能を望んでいます。 – kkm
これはあなたの実際のコードですか?その場合、 '#include'、 'cout'の代わりに' couT'を使用し、 'using namespace std;'(またはstd :: coutを使って) 't1 。:printwindow() 'を実行すると、行の最後にセミコロンがないと、コンパイル時に問題が発生します。 –
tinman