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。我必须添加一个功能,因此我简单地在项目中添加了一个文件夹和添加的文件。您似乎需要编辑用于构建项目的配置文件,并添加您创建的源的文件名:)