Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我的c++;代码不断返回';未定义对'的引用;当我试图编译时,我的一个构造函数?_C++ - Fatal编程技术网

C++ 为什么我的c++;代码不断返回';未定义对'的引用;当我试图编译时,我的一个构造函数?

C++ 为什么我的c++;代码不断返回';未定义对'的引用;当我试图编译时,我的一个构造函数?,c++,C++,我已经试着让我的代码编译一段时间了。一直在网上寻找解决我问题的方法,但我没有找到。我们将非常感谢您的帮助 以下是我拥有的一些文件: 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::

我已经试着让我的代码编译一段时间了。一直在网上寻找解决我问题的方法,但我没有找到。我们将非常感谢您的帮助

以下是我拥有的一些文件:

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
\ifndef门H
#定义GATE_H
#包括
班门{
私人:
标准::矢量输入线、输出线;
字符函数;
公众:
门(字符函数、常量标准::向量和输入线、常量标准::向量和输出线);
};
#恩迪夫
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;
}
#包括“gate.h”
Gate::Gate(字符功能、常量std::向量和输入线、常量std::向量和输出线){
功能=功能;
inWires=输入线;
出线=输出线;
}
电路文件读取器.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
\ifndef电路\u文件\u读取器\u H
#定义回路文件读取器
#包括
#包括
#包括
#包括“电路h”
#包括“h门”
电路读取电路(std::字符串文件名);
#恩迪夫
电路文件读取器.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);
}
#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.h”
电路读取电路(std::字符串文件名){
std::载体iw(1,7);
std::载体ow(1,8);
g0号门('a',iw,ow);//这就是问题所在
矢量门;
//门。推回(g0);
返回电路(门,0);
}
测试电路文件读取器.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);
}
#include <iostream>
#include <string>
#include "circuit_file_reader.h"

int main(int argc, char** argv) {
  readCircuit("");
  std::cout << "Test Worked!" << std::endl;
  return 0;
}
#包括
#包括
#包括“电路文件读取器.h”
int main(int argc,字符**argv){
读取电路(“”);

std::cout您在头文件中声明了头文件,但它的定义在源(.cpp)文件中。您没有向编译器指定它。您没有指定要编译的内容,但是如果您正确编译所有源文件,那么它应该可以工作。下面是使用g++的示例

您没有提供编译程序所需的circuit.h文件,因此我制作了一个虚拟文件,以便它可以编译

编辑:我被要求删除图片,所以这里是文本中的g++命令

g++ circuit_filer_reader.cpp gate.cpp main.cpp -o test
./test
Test Worked!
如果出于任何原因,有人想编译它,这里是dummy circuit.h文件

#include "gate.h"
struct Circuit
{
    Circuit(std::vector<Gate> gates, int test)
        {
            return;
        }
};
#包括“gate.h”
结构电路
{
电路(标准::矢量门,int测试)
{
返回;
}
};

您没有提供编译器命令,但我猜您在尝试生成最终二进制文件时没有链接gate.o。

很可能是在如何编译它?您的确切命令是什么?我明白了。也许您需要“清理”你的东西和重新编译的一切。这就为我摆脱了不常见的奇怪错误…你知道编译器错误和链接器错误之间的区别吗?这是后者。你链接到gate.o吗?作为一种旁白,最好在gate::gate中初始化成员:你是在默认构造它们之后分配它们的。P请不要发布文本图片。结果我完全忘记添加gate.cpp了。