【问题标题】:Error in calling a function defined within a struct调用结构中定义的函数时出错
【发布时间】:2013-02-07 07:21:13
【问题描述】:

我得到了一个创建双向链表的代码。链表中的节点是一个名为 ListItem 的结构。现在在该节点内是一个为该节点分配值的函数。我遇到的问题是我似乎无法创建节点并使用函数为其分配值。

这是结构“ListItem”的代码。

template <class T>
struct ListItem
{
    T value;
    ListItem<T> *next;
    ListItem<T> *prev;

    ListItem(T theVal)
    {
        this->value = theVal;
        this->next = NULL;
        this->prev = NULL;
    }
};

随附的.cpp文件中对应的ListItem函数:

template <class T>
ListItem<T>* List<T>::getHead()
{
}

template <class T>
ListItem<T>* List<T>::getTail()
{
}

template <class T>
ListItem<T> *List<T>::searchFor(T item)
{
}

这是我试图在我的主要功能中做的事情。

int main()
{
    ListItem<int> a;
    a.ListItem(int 5);
    system("PAUSE");
}

我在这里要做的就是创建一个节点并为其分配一个值。以下是我遇到的错误:

='a' 不是类或命名空间

=在 '(' 标记之前缺少模板参数

='int'之前的预期主要表达式

【问题讨论】:

    标签: c++ struct


    【解决方案1】:

    请记住 structclass 相同,因此您所做的是创建一个名为 ListItem 的类,其中包含一个采用单个参数的普通构造函数。

    你像平常一样创建它:

    ListItem<int> a(5);
    

    您还有一些其他问题,例如具有未在类中声明的类的函数(例如getHead 函数)。您也不能在单独的源文件中实现模板化函数成员,它们必须与类(或结构)定义一起在头文件中。

    【讨论】:

    • 非常感谢您的回复,首先。我明白你关于未在类/结构中声明的函数的观点,但我不明白你关于在单独文件中声明的成员函数的观点。以 getHead 为例。你是说 getHead 的实现应该在类定义中?
    • @SaadTariq 当使用模板类时,它需要完整定义,不仅是类,还需要函数。要么将函数内联放在类中,要么将它们单独放在类定义之后(就像现在一样,但将函数放在头文件中而不是单独的源文件中)。
    【解决方案2】:

    ListItem 不是函数名,而是类/结构的构造函数。构造函数是一个特殊的函数,不能这样调用。您的代码应如下所示:

    int main()
    {
        ListItem<int> a(5);
        system("PAUSE");
    }
    

    【讨论】:

    • 感谢您的回复。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2019-05-02
    相关资源
    最近更新 更多