Tre*_*tto 41 c++ symbols compilation undefined hyperlink
所以我想开始一项任务,我的教授给我们一个Main.cpp,Main.h,Scanner.cpp,Scanner.h和其他一些实用工具.
我的工作是创建一个Similarity类来使用余弦和Jaccard系数比较文档.但是,我似乎无法正确链接项目,因此我无法启动实际代码.
经过几个小时的努力,看看我做错了什么,我需要新鲜的眼睛看看我做错了什么,我怀疑这是显而易见的.
这是Main.cpp
#include "Main.h"
using namespace std;
static const string TAG = "Main: ";
int main(int argc, char *argv[])
{
string inStreamName;
string logStreamName;
string outStreamName;
ofstream outStream;
string timeCallOutput;
Scanner inStream;
Similarity similarity;
///////////////////////////////////////////////////////////////
// Boilerplate for naming files and opening files
Utils::CheckArgs(3, argc, argv, "infilename outfilename logfilename");
outStreamName = static_cast<string>(argv[2]);
logStreamName = static_cast<string>(argv[3]);
Utils::FileOpen(outStream, outStreamName);
Utils::LogFileOpen(logStreamName);
timeCallOutput = Utils::timecall("beginning");
Utils::logStream << timeCallOutput << endl;
Utils::logStream << TAG << "Beginning execution" << endl;
Utils::logStream << TAG << "outfile '" << outStreamName << "'" << endl;
Utils::logStream << TAG << "logfile '" << logStreamName << "'" << endl;
Utils::logStream.flush();
///////////////////////////////////////////////////////////////
// What follows here is the real work of this code.
// read the entire input file and echo it back
// compute the two similarity coefficients
inStreamName = static_cast<string>(argv[1]);
inStream.openFile(inStreamName);
Utils::logStream << TAG << "infile '" << inStreamName << "'" << endl;
Utils::logStream.flush();
similarity.readData(inStream);
outStream << TAG << "Data Begin\n" << similarity.toString() << endl;
outStream << TAG << "Data End\n" << endl;
outStream.flush();
inStream.close();
outStream << TAG << "Begin similarity computation" << endl;
outStream << TAG << "Maximum Jaccard similarity:\n" <<
similarity.maxJaccard() << endl;
outStream << TAG << "Maximum cosine similarity:\n" <<
similarity.maxCosine() << endl;
outStream << TAG << "End similarity computation" << endl;
outStream.flush();
///////////////////////////////////////////////////////////////
// Boilerplate for terminating gracefully
Utils::logStream << TAG << "Ending execution" << endl;
timeCallOutput = Utils::timecall("ending");
Utils::logStream << timeCallOutput << endl;
Utils::logStream.flush();
outStream.flush();
Utils::FileClose(outStream);
Utils::FileClose(Utils::logStream);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和Main.h
#ifndef MAIN_H
#define MAIN_H
#include "../../Utilities/Utils.h"
#include "../../Utilities/Scanner.h"
#include "Similarity.h"
class Main
{
public:
int main();
virtual ~Main();
private:
};
#endif // MAIN_H
Run Code Online (Sandbox Code Playgroud)
我的相似性.pp
#include "Similarity.h"
using namespace std;
void readData(Scanner& inStream){
}
string maxCosine(){
return "cosine";
}
string maxJaccard(){
return "jaccard";
}
string toString(){
return "toString";
}
Run Code Online (Sandbox Code Playgroud)
最后我的Similarity.h:
#ifndef SIMILARITY_H
#define SIMILARITY_H
#include "../../Utilities/Scanner.h"
class Similarity
{
public:
Similarity();
virtual ~Similarity();
void readData(Scanner& inStream);
string maxCosine();
string maxJaccard();
string toString();
private:
};
#endif
Run Code Online (Sandbox Code Playgroud)
当我使用他提供的makefile,以及我必须使用的makefile以便他的脚本工作来评分它时,我得到这个错误:
g++ -O3 -Wall -o Similarity.o -c Similarity.cpp
g++ -O3 -Wall -o Aprog Main.o Similarity.o Scanner.o ScanLine.o Utils.o
Undefined symbols for architecture x86_64:
"Similarity::maxJaccard()", referenced from:
_main in Main.o
"Similarity::readData(Scanner&)", referenced from:
_main in Main.o
"Similarity::toString()", referenced from:
_main in Main.o
"Similarity::maxCosine()", referenced from:
_main in Main.o
"Similarity::Similarity()", referenced from:
_main in Main.o
"Similarity::~Similarity()", referenced from:
_main in Main.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [Aprog] Error 1
Run Code Online (Sandbox Code Playgroud)
感谢您阅读所有内容,我们将非常感谢任何建议或解决方案.
joh*_*ohn 54
这里没有什么神秘感,链接器告诉你你没有定义丢失的符号,你没有.
Similarity::Similarity()
或者Similarity::~Similarity()
只是遗失了,你已经错误地定义了其他人,
void Similarity::readData(Scanner& inStream){
}
Run Code Online (Sandbox Code Playgroud)
不
void readData(Scanner& inStream){
}
Run Code Online (Sandbox Code Playgroud)
等等
第二个是名为readData的函数,只有第一个是Similarity类的readData方法.
要清楚这一点,请在Similarity.h中
void readData(Scanner& inStream);
Run Code Online (Sandbox Code Playgroud)
但在Similarity.cpp
void Similarity::readData(Scanner& inStream){
}
Run Code Online (Sandbox Code Playgroud)