我收到此错误,我无法独自解决
source.cpp:85:8: error: request for member ‘put_tag’ in ‘aux’, which is of non-class type ‘Keyword()’
source.cpp:86:8: error: request for member ‘put_site’ in ‘aux’, which is of non-class type ‘Keyword()’
make: *** [source.o] Error 1
给我这个错误的代码是
Keyword aux();
aux.put_tag(word);
aux.put_site(site);
我必须提到单词和网站是char *
类型
现在,我的关键字类定义就是这个:
class Keyword{
private:
std::string tag;
Stack<std::string> weblist;
public:
Keyword();
~Keyword();
void put_tag(std::string word)
{
tag = word;
}
void put_site(std::string site)
{
weblist.push(site);
}
};
非常感谢!
修改
Keyword aux();
aux.put_tag(word);
aux.put_site(site);
在
Keyword aux;
aux.put_tag(word);
aux.put_site(site);
我收到了这个错误:
source.o: In function `Algorithm::indexSite(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
source.cpp:(.text+0x2c6): undefined reference to `Keyword::Keyword()'
source.cpp:(.text+0x369): undefined reference to `Keyword::~Keyword()'
source.cpp:(.text+0x4a8): undefined reference to `Keyword::~Keyword()'
source.o: In function `Keyword::put_site(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
source.cpp:(.text._ZN7Keyword8put_siteESs[Keyword::put_site(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)]+0x2a): undefined reference to `Stack<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::push(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
collect2: ld returned 1 exit status
make: *** [tema3] Error 1
答案 0 :(得分:17)
这一行不符合您的想法:
Keyword aux();
声明名为aux
的函数不带参数并返回Keyword
。你最有可能写(没有括号):
Keyword aux;
其中声明类型为Keyword
的对象。
<强>更新强>
关于您遇到的下一个错误,这是因为您有类的构造函数和析构函数的声明,而不是定义。实际上,您获得的错误来自链接器,而不是来自编译器。
要提供构造函数和析构函数的简单定义,请更改:
Keyword();
~Keyword();
进入这个:
Keyword() { }
~Keyword() { }
或者,只要这些成员函数什么也不做,只要省略它们 - 编译器就会为你生成它们(除非你添加一些其他用户声明的构造函数,对于构造函数的内容)。
答案 1 :(得分:3)
不是这个
Keyword aux();
aux.put_tag(word);
aux.put_site(site);
但是这个
Keyword aux;
aux.put_tag(word);
aux.put_site(site);
在您的版本Keyword aux();
中,函数原型不是变量声明。
答案 2 :(得分:0)
当我在主函数中输入以下代码时遇到同样的问题,我有一个List.h和List.cpp文件包含我的List类。
List<int,int> myList();
bool x=myList.isEmpty();
我收到错误的&#34;请求会员&#39; isEmpty&#39; in&#39; myList&#39;,这是非类型&#39; List()&#39;&#34;
错误是因为编译器将myList()视为函数原型
当我将代码更正为
时List<int,int> myList;
bool x=myList.isEmpty();
我得到了错误&#34;未定义的引用`List :: List()&#34;析构函数有几个类似的错误。
在此页面中进一步检查我的代码和答案我发现我必须在main.cpp中包含我的List.cpp文件,但是我在List.cpp文件中包含List.h但似乎此信息必须包含被告知主文件。 进一步阅读this tutorial解释了为什么,如果我在不包含List.cpp的情况下编译项目,它将编译正常,因为List.h文件具有原型,但它会在链接器阶段失败,因为链接器将无法解析对特定函数的List()调用。