c++ - 是否需要在头文件中定义初始化列表?

标签 c++ initialization-list

最近我创建了类Square:

=========头文件======

class Square
{
    int m_row;
    int m_col;

public:
    Square(int row, int col): m_row(row), m_col(col) 
};

==========cpp文件======

#include "Square.h"

Square::Square(int row, int col)
{
    cout << "TEST";
}

但后来我收到很多错误。如果我删除 cpp 文件并将头文件更改为:

=========头文件======

class Square
{
    int m_row;
    int m_col;

public:
    Square(int row, int col): m_row(row), m_col(col) {};
};

它没有错误。是否意味着初始化列表必须出现在头文件中?

最佳答案

初始化列表是构造函数定义的一部分,所以你需要在你定义构造函数体的地方定义它。 这意味着你可以在你的头文件中拥有它:

public:
    Square(int row, int col): m_row(row), m_col(col) {};

或在 .cpp 文件中:

Square::Square(int row, int col) : m_row(row), m_col(col) 
{
    // ...
}

但是当你在 .cpp 文件中有定义,然后在头文件中,应该只有它的声明:

public:
    Square(int row, int col);

关于c++ - 是否需要在头文件中定义初始化列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15335193/

相关文章:

c++ - wxSlider点击鼠标时如何设置步长?

c++ - C++ 构造函数名称后面的冒号有什么作用?

c++ - 如何生成具有唯一值的 vector ?

c++ - 构造函数的初始化列表

c++ - 使用尾随垃圾 boost gzip 读取文件

c++ - 如何制作 ' i ' vector

c++ - 在构造函数初始化列表中初始化成员数组(C++11 之前)

c - 有没有办法在行为不当的指定初始化器时得到警告?

c++ - 收到Foo<S>后如何构造Foo<T>?

c++ - 我的代码在构建时没有出现任何错误,但无法运行