3

これは非常にナイーブかもしれませんが、cpp のプリプロセッサについてかなり混乱しています。ヘッダー ファイルを定義しました -- Node.h:

#ifndef NODE_H_
#define NODE_H_

#include<iostream>
class Node{
    friend std::ostream &operator<<(std::ostream &os, const Node & n);
    public:
        Node(const int i = -1);
    private:
        Node * next;
        int value;
    friend class List;

};
#endif

次に、Node.cpp でメソッドを定義しました。

#include "Node.h"
using namespace std;

Node::Node(const int i):value(i), next(NULL){}

ostream& operator <<(ostream & os, const Node& n){
    return os<<"value : "<<n.value<<endl;
}

最後に、プリプロセッサをチェックするための test.cpp ファイルがあります。

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

int main(){
    Node * n = new Node;
    cout<<*n;
}

ただし、gcc でコンパイルしようとすると、次のエラーが発生しました。

/home/xuan/lib/singleLinkedList/test.cpp:6:'Node::Node(int)'未定義参照

4

1 に答える 1

1

あなたのファイルを考えると、私が実行すると:

$ g++ test.cpp
/tmp/ccM7wRNZ.o:test.cpp:(.text+0x2c): undefined reference to `Node::Node(int)'
/tmp/ccM7wRNZ.o:test.cpp:(.text+0x44): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Node const&)'
/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: /tmp/ccM7wRNZ.o: bad reloc address 0x0 in section `.ctors'
collect2: ld returned 1 exit status

...しかし、実行すると:

Simon@R12043 ~/dev/test/cpp
$ g++ test.cpp node.cpp

Simon@R12043 ~/dev/test/cpp
$

node.cppしたがって、プロジェクトにリンクされるファイルには含まれていないと思います。つまり、Nodeクラスを見つけられないのはリンカです。

于 2013-06-27T03:19:29.643 に答える