私はC++を初めて使い、名前空間に関する助けが必要です。C++リンカエラー
node.h <--class interface
node.cpp <--implementation
testNodeFunctions.cpp
testNodeMain.cpp
//node.h
---------------------------------
#include <iostream>
using namespace std;
namespace namespaceName{
class Node {
private:
int data;
public:
void setData(int x);
int getData();
};
//and some more functions
}
//node.cpp
-------------------------------------
#include <iostream>
#include "node.h"
using namespace std;
namespace namespaceName {
//provides implementation of the memeber functions
int Node::getData() const{
return data;
}
void Node::setData(int x){
data=x;
}
}//namespace
//testNodeFunctions.cpp
-------------------------------------
#include <iostream>
#include "Node.h"
using namespace std;
using namespace namespaceName;
void showData(){
//creates a Node object and prints some stuff
Node a=37;
cout<<a.getValue()<<endl;
}
//testNodeMain.cpp
----------------------------------------------
#include <iostream>
#include "Node.h"
void showData();
int main(){
//calls methods from testNodeFunctions
showData();
}
私は現在の名前空間を定義していた場合、私はわからない:以下の は私の4つのファイルです。
どのようにtestNodeMain.cppファイルからshowData()関数を呼び出しますか?現在、私は
わかりまし事前にそんなに
感謝している「未定義namespaceName ::ノードへの参照:: methodNameの」旨のリンカエラーを取得しています。意味がある。ヘッダーから名前空間stdを使って削除しました。 main()を持つtestNodeMain.cppをコンパイルしています。 TestNodeMain.cppはtestNodeFunctions.cppから関数を呼び出します。 testNodeFunctions.cppはNodeオブジェクトを作成します。
ヘッダーファイルに 'using namespace ... 'を入れないでください。それでは、ヘッダーに '#include'があるのはなぜですか? –
関連するコードとビルドコマンドを表示してください。 2つの可能性があります:あなたのコード(表示していない)が間違っているか、ビルドコマンド(あなたが表示していない)が間違っています。ところで、ヘッダーのグローバル名前空間で 'namespace std;'を使用しないでください。これはEvilです。ヘッダに ''を含まないようにしてください(例えば、 ''を含む)。 –
コンパイル方法に関する詳細を追加できますか? node.hヘッダーはインクルードしていますが、3つの.cxxファイルをまとめてコンパイルしていますか? – spbots