-2

我在编译以下源时遇到问题:

    QString code = this->viewManager()->activeView()->document()->text();
    Qualifier qua;
    qua.setQCode(code);

它告诉我

error: undefined reference to `Qualifier::setQCode(QString)'

qualifier.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__ */

并且 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;
}
*/
}

我不明白为什么没有看到参考!我的意思是,是完全相同的事情,与项目其余部分中的方式相同!

4

4 回答 4

6

根据头文件,您有 2 个类似功能的不同实现:

void setCode(string code);

void setQCode(QString code);

但是在 .cpp 你只实现第一个:

void Qualifier::setCode(string code)
{
    this->code = code;
}

因此编译器抱怨缺少setQCode().

解决方案:要么实现它,要么从头文件中删除它的定义。

于 2012-05-09T13:06:29.033 回答
0

这是链接器报告的,不是吗?我看起来像包含“限定符”类定义的特定翻译单元或库不包含在链接过程中。

于 2012-05-09T13:52:42.043 回答
0

您没有在 .cpp 文件中向我们展示 Qualifier::setQCode(QString) 的实现。

可能实现 cpp 文件中的参数与头文件中原型的参数不匹配。

于 2012-05-09T13:07:37.660 回答
0

你有2个功能

void setCode(string code);

void setQCode(QString code);

你可能忘记实现 setQCode 了吗?

于 2012-05-09T13:07:51.997 回答