c++ - 为什么我不能在另一个文件中调用类的非默认构造函数?

标签 c++ c++11

<分区>

我是 C++ 的新手。我已经开始编写一个名为 Row 的类,我试图调用一个非默认构造函数来在单独的 main.cpp 文件中创建一个行对象,但我一直收到一个我不明白的错误。谁能向我解释我做错了什么?

这是我的三个文件:

行.h

#ifndef ROW_H
#define ROW_H
#include<vector>
#include<iostream>

class Row {
    std::vector<int> row;
public:
    // constructor
    Row(std::vector<int> row);
};

#endif

行.cpp

#include<vector>
#include<iostream>
#include "Row.h"

// constructor
Row::Row(std::vector<int> row_arg) {
    row = row_arg;
}

主要.cpp

#include<vector>
#include<iostream>
#include "Row.h"
using namespace std;

int main() {
    vector<int> v = {1, 2, 3, 4};
    Row row(v);
    return 0;
}

我在尝试编译 main.cpp 时收到的错误是这样的:

/tmp/ccJvGzEW.o:pascal_classes.cpp:(.text+0x71): undefined reference to `Row::Row(std::vector<int, std::allocator<int> >)'
/tmp/ccJvGzEW.o:pascal_classes.cpp:(.text+0x71): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `Row::Row(std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status

最佳答案

这看起来像是链接器错误,而不是编译器错误,我猜你会收到此错误,因为

  1. 您忘记编译Row.cpp,或者
  2. 您忘记将 Row.o 链接到最终的可执行文件中。

如果您从命令行编译,请确保同时编译 main.cppRow.cpp。这应该可以解决问题!

关于c++ - 为什么我不能在另一个文件中调用类的非默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34822469/

相关文章:

c++ - C++ 中的转换错误

c++ - 处理大量规则(条件和约束)CEP 系统

c++ - stack<int, list<int>> 到底是什么意思,它与 stack<int> 有何不同?

c++ - C++11 支持所需的 libstdc++ 的合理最低版本是多少

c++ - 解释 gperftools 在多线程工作负载上的结果

c++ - ISAPI 扩展 : What is the difference between TerminateExtension and the extensions destructor?

c++ - 试图将 push_back 放入指向抽象类的 vector 中

c++11 - 将 nullptr 解引用到 lambda 函数是否是未定义的行为?

没有动态调度开销的基类抽象方法的 C++ 习惯用法?

c++ - 如何在密度函数的特定值处有效地绘制二维正态分布的等值线?