我一直试图让我的代码编译一段时间。保持在线寻找我的问题的解决方案,但我没有找到一个。一些帮助将不胜感激。
以下是我的一些文件:
gate.h
#ifndef GATE_H
#define GATE_H
#include <vector>
class Gate {
private:
std::vector<int> inWires, outWires;
char function;
public:
Gate (char function, const std::vector<int>& inputWires, const std::vector<int>& outputWires);
};
#endif
gate.cpp
#include "gate.h"
Gate::Gate (char functionality, const std::vector<int>& inputWires, const std::vector<int>& outputWires) {
function = functionality;
inWires = inputWires;
outWires = outputWires;
}
circuit_file_reader.h
#ifndef CIRCUIT_FILE_READER_H
#define CIRCUIT_FILE_READER_H
#include <string>
#include <iostream>
#include <vector>
#include "circuit.h"
#include "gate.h"
Circuit readCircuit(std::string filename);
#endif
circuit_file_reader.cpp
#include "circuit_file_reader.h"
Circuit readCircuit (std::string filename) {
std::vector<int> iw (1, 7);
std::vector<int> ow (1, 8);
Gate g0 ('a', iw, ow); // This is the problem
std::vector<Gate> gates;
// gates.push_back (g0);
return Circuit (gates, 0);
}
test_circuit_file_reader.cpp
#include <iostream>
#include <string>
#include "circuit_file_reader.h"
int main(int argc, char** argv) {
readCircuit("");
std::cout << "Test Worked!" << std::endl;
return 0;
}
每当我尝试编译此代码时,我的编译器都会返回
circuit_file_reader.cpp:(.text+0xa5): undefined reference to `Gate::Gate(char, std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> > const&)' collect2: error: ld returned 1 exit status
这很奇怪,因为已经定义了Gate构造函数,所以它为什么不能看到它?
答案 0 :(得分:1)
您在头文件中声明了标头,但其定义位于源(.cpp)文件中。您没有将此指定给编译器。您没有指定要编译的内容,但如果您正确编译所有源文件,那么它应该可以工作。以下是使用g ++的示例。
你没有提供所需的circuit.h文件来编译程序,所以我做了一个虚拟的文件就可以编译了。
编辑:我被要求删除图片,所以这里是文本中的g ++命令。
g++ circuit_filer_reader.cpp gate.cpp main.cpp -o test
./test
Test Worked!
如果无论出于何种原因,任何人想要编译它都是虚拟的circuit.h文件。
#include "gate.h"
struct Circuit
{
Circuit(std::vector<Gate> gates, int test)
{
return;
}
};
答案 1 :(得分:1)
您没有提供编译器命令,但我猜您在尝试生成最终二进制文件时没有链接gate.o。