C++ 类的未定义引用::方法C++;
我在编译以下源代码时遇到问题:C++ 类的未定义引用::方法C++;,c++,reference,C++,Reference,我在编译以下源代码时遇到问题: QString code = this->viewManager()->activeView()->document()->text(); Qualifier qua; qua.setQCode(code); 它告诉我 error: undefined reference to `Qualifier::setQCode(QString)' 限定符.h和.cpp的代码如下 #ifndef __QUALIFIER_H
QString code = this->viewManager()->activeView()->document()->text();
Qualifier qua;
qua.setQCode(code);
它告诉我
error: undefined reference to `Qualifier::setQCode(QString)'
限定符.h和.cpp的代码如下
#ifndef __QUALIFIER_H__
#define __QUALIFIER_H__
#include <iostream>
#include <string>
#include <QString>
#include <queue>
#include "analyser.h"
using namespace std;
class Qualifier
{
private:
string code;
queue<method> tokenisedCode;
//queue<analysis> analysedCode;
void tokeniseCode();
public :
void setCode(string code);
void setQCode(QString code);
void computeLocAnalysis();
void computeCCAnalysis();
void visualiseResults();
};
#endif /* __QUALIFIER_H__ */
\ifndef\uuuh__
#定义限定符__
#包括
#包括
#包括
#包括
#包括“Analyzer.h”
使用名称空间std;
类限定符
{
私人:
字符串代码;
队列令牌码;
//队列分析代码;
void tokeniseCode();
公众:
无效设置码(字符串码);
无效setQCode(QString代码);
无效计算机局部分析();
无效计算分析();
无效可视化结果();
};
#endif/*.\uuu限定符\u H\uu*/
而CPP是
#include "qualifier.h"
using namespace std;
void Qualifier::tokeniseCode()
{
Parser par;
par.setCode(code);
par.parse();
this->tokenisedCode = par.getMethods();
}
void Qualifier::setCode(string code)
{
this->code = code;
}
void Qualifier::setQCode(QString code)
{
this->code = qPrintable(code);
}
void Qualifier::computeLocAnalysis()
{
std::cout << this->code << std::endl;
/*
locAnalyser ana = new locAnalyser();
ana.setMethodList(tokenisedCode);
ana.computeResult();
this->analysedCode = ana.getResult();
*/
}
void Qualifier::computeCCAnalysis()
{
// To be implemented;
}
void Qualifier::visualiseResults()
{
/*
//Need a grapher of the results
while(!analysedCode.empty())
{
analysis meth = analysedCode.front();
cout << "LOC: " << meth.result << "\t\t" << meth.name << endl;
analysedCode.pop();
cout << "------------------------------------" << endl;
}
*/
}
#包括“qualifier.h”
使用名称空间std;
void限定符::tokeniseCode()
{
语法分析器;
标准代码(代码);
PAR.PARSER();
这个-> ToKeNeDeCd==PAR.GETMultSe();
}
void限定符::setCode(字符串代码)
{
此->代码=代码;
}
void限定符::setQCode(QString代码)
{
此->代码=可打印(代码);
}
void限定符::ComputeLocalAnalysis()
{
std::cout code analysedCode=ana.getResult();
*/
}
void限定符::ComputecAnalysis()
{
//待实施;
}
void限定符::visualiseResults()
{
/*
//需要一个结果图示器吗
而(!analysedCode.empty())
{
分析方法=分析代码.front();
cout根据头文件,您有两种类似函数的不同实现:
void setCode(string code);
void setQCode(QString code);
但在.cpp中,您只实现了第一个:
void Qualifier::setCode(string code)
{
this->code = code;
}
因此,编译器会抱怨缺少setQCode()
解决方案:实现它或从头文件中删除它的定义。您没有向我们展示.cpp文件中Qualifier::setQCode(QString)的实现
可能来自实现cpp文件的参数与来自头文件的原型参数不匹配。您有两个函数
void setCode(string code);
void setQCode(QString code);
可能您忘记实现setQCode了???这是由链接器报告的,不是吗?我看起来链接过程中没有包含包含“Qualifier”类定义的特定翻译单元或库。您是否会收到与tokeniseCode()相同的错误
?如果是这样,可能看不到您的cpp文件。是的,我将要使用的对象限定符的每个方法都会生成相同的错误:未定义的引用限定符::name_method.Does“依此类推”包括编译器抱怨的方法的定义?如果是这样,您可能应该包括它以避免混淆。我已经在头文件中删除了名称空间。没有更改,相同的错误。完成。有实现,只是它不在本文中。现在有了,问题仍然存在……您在头文件中有多少源文件是project?这可能只是因为它们没有正确链接。这是一个开源项目,KDE的Kate。我必须添加一个功能,因此我简单地在项目中添加了一个文件夹和添加的文件。您似乎需要编辑用于构建项目的配置文件,并添加您创建的源的文件名:)