LL故障中的私有节点Ctor

时间:2009-08-18 00:36:28

标签: c++

以下是链表头文件:

// list.h
class list
{
public:
    list(void);             // constructor
    virtual ~list(void);    // destructor
    void displayByName(ostream& out) const;
    void displayByRating(ostream& out) const;
    void insert(const winery& winery);
    winery * const find(const char * const name) const;
    bool remove(const char * const name);

private:
    struct node
    {
        node(const winery& winery);     // constructor
        winery item;
        node * nextByName;
        node * nextByRating;
    };

    node * headByName;
    node * headByRating;
};
酒庄有4个参数如下:

// code in main.cpp
// this statement is very important
// I am trying to add the info to the list as a reference to the node ctor
wineries->insert(winery("Lopez Island Vinyard", "San Juan Islands", 7, 95));

到目前为止,我执行了这段代码。

我调试了,它把我带到了ctor。我使用ctor init列表进行初始化 私人会员varaibles。

//winery.cpp
winery::winery(const char * const name, const char * const location, const int acres, const int rating)
  : name( new char[strlen(name)+1] ), location( new char[strlen(location)+1] ), acres( 0 ), rating( 0 )
{   
    // arcres, name, location, rating, are all private members of the winery class

}

然后我们转到链表:

//list.cpp
void list::insert(const winery& winery)
{   
    list *ListPtr = new list();
// here im trying to add all the info to the list:
    node *NodePtr = new node( winery );

}

我收到链接器错误:LNK2019:未解析的外部符号“public:__thiscall list :: node :: node(class winery const&)”(?? 0node @ list @@ QAE @ ABVwinery @@@ Z)引用在函数“public:void __thiscall list :: insert(class winery const&)”(?insert @ list @@ QAEXABVwinery @@@ Z)

因为节点ctor是一个链接列表私有的结构? list.cpp?

3 个答案:

答案 0 :(得分:3)

您为节点声明了这个构造函数,但没有其他构造函数:

node(const winery& winery)

然后,你要为酒厂实现一个构造函数,但不是为节点实现(显示):

winery::winery(const char * const name, const char * const location, const int acres, const int rating)

由于声明而编译文件,但链接器将失败。

您(在您正在展示的代码中)没有任何地方实际实现节点的构造函数。某处,根据您的代码,您需要声明并实现一个以酒庄为参数的构造函数。错误表明链接器找不到合适的构造函数。

答案 1 :(得分:2)

您在哪里以及如何为node的构造函数提供实现?它无法找到它

答案 2 :(得分:1)

您忘记了定义(除了声明list::node的构造函数,或者您忘记链接从{生成的对象文件{1}}文件,将该构造函数的定义放入您的应用程序中。这样:

.cpp

只是一个声明,而不是一个定义(因为它没有正文)。