gpt4 book ai didi

c++ - CPP - 编译错误 (G++)

转载 作者:行者123 更新时间:2023-11-27 23:02:30 27 4
gpt4 key购买 nike

我用的是Mac OS X。然后我写了一个简单的程序。但是,我在终端中编译时出错。

我的终端代码是:g++ main.cpp -o main

那么错误是:

架构 x86_64 的 undefined symbol :
“TestBed::TestBed()”,引用自:
_main 在 main-3003ff.o 中
ld: 找不到体系结构 x86_64 的符号
clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

我不明白这个错误,因为当我在 XCODE6 中构建它时,它没有给出任何错误。

TestBed.cpp:

#include "TestBed.h"

using namespace std;
TestBed::TestBed(){
}

void TestBed::execute(){
int x ;
x = algorithm->select();
cout << "x: " << x;
}
void TestBed::setAlgorithm(int type, int k){
if(type==1){
algorithm = new AlgorithmSortAll(k);
}else if(type==2){
algorithm = new AlgorithmSortK(k);
}
}
TestBed::~TestBed(){

}

TestBed.h:

#ifndef TestBed__
#define TestBed__
#include <iostream>
#include "SelectionAlgorithm.h"
#include "AlgorithmSortAll.h"
#include "AlgorithmSortK.h"

class TestBed{
private:
SelectionAlgorithm *algorithm;
public:
//If I delete virtual keyword in execute,setAlgorithm,~TestBed
//It gives 3 more errors.
virtual void execute();
virtual void setAlgorithm(int type, int k);
TestBed();
virtual ~TestBed();
};

#endif

ma​​in.cpp:

#include <iostream>
#include "TestBed.h"
using namespace std;
int main() {

TestBed *tb = new TestBed();

int algorithm_type;
cin >> algorithm_type;
int k;
cin >> k;

tb->setAlgorithm(algorithm_type, k);


tb->execute();
delete tb;

return 0;
}

已更新

AlgorithmSortAll.cpp: #include "AlgorithmSortAll.h"

AlgorithmSortAll::AlgorithmSortAll(int k) : SelectionAlgorithm(k){
int N;
std::cin >> N;

int *pNums = 0;
pNums = new int[N];// Allocate n ints and save the pointer in pNums
for (int i=0; i<N; i++) {
int number;
std::cin >> number;
pNums[i] = number;
}
//Sorting
int i, j, moved;
for (i = 0; i < N; i++) {
moved = pNums[i];
j = i;
while (j > 0 && pNums[j - 1] > moved) {
pNums[j] = pNums[j - 1];
j--;
}
pNums[j] = moved;
}
//Assignin k
SelectionAlgorithm::k = pNums[k];

delete [] pNums; // When done, free the memory pointed to by pNums
pNums = 0;
}

int AlgorithmSortAll::select(){
return SelectionAlgorithm::k;
}
AlgorithmSortAll::~AlgorithmSortAll(){

}

AlgorithmSortAll.h:

#ifndef AlgorithmSortAll__
#define AlgorithmSortAll__
#include "SelectionAlgorithm.h"

class AlgorithmSortAll : public SelectionAlgorithm{
public:
virtual int select();
AlgorithmSortAll(int k);
virtual ~AlgorithmSortAll();
};

#endif

AlgorithmSortK.cpp:

#include "AlgorithmSortK.h"

AlgorithmSortK::AlgorithmSortK(int k) : SelectionAlgorithm(k){

}
int AlgorithmSortK::select(){
return SelectionAlgorithm::k;
}

AlgorithmSortK.h:

#ifndef AlgorithmSortK__
#define AlgorithmSortK__
#include "SelectionAlgorithm.h"
class AlgorithmSortK : public SelectionAlgorithm{
public:
int select();
public:
AlgorithmSortK(int k);
};
#endif

我不明白这个问题。我可以在 Xcode 中运行,但不使用终端编译。亲切的问候。

最佳答案

你的程序是从多个源文件构建的,所以最简单的方法是:

g++ main.cpp TestBed.cpp -o main

如果您使用它们,并以相同的方式将更多的 .cpp 文件放在那里。

将每个 .cpp 文件编译成 .o 文件然后将它们链接在一起的更好方法:

g++ -c main.cpp 
g++ -c TestBed.cpp
g++ main.o Testbed.o -o main

然后,如果您更改一个源,则不必重新编译所有内容。但这可以通过 make 或您的 IDE

等实用程序更好地完成

关于c++ - CPP - 编译错误 (G++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26368661/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com