【问题标题】:VS compiling error when passing arguments to c++ constructor将参数传递给c ++构造函数时VS编译错误
【发布时间】:2018-05-09 23:32:41
【问题描述】:

我正在尝试将两个参数传递给构造函数:

class CTest1
{
public:
    CTest1(const int i8BitImageID, const int i256BitImageID) : m_i8BitImageID(i8BitImageID), m_i256BitImageID(i256BitImageID) {};
private:
    int m_i8BitImageID;
    int m_i256BitImageID;
};

#define BITMAP_1_ID 1
#define BITMAP_2_ID 2

class CTest2
{
public:
    CTest1 test1(BITMAP_1_ID, BITMAP_2_ID); // Compile error here
};

当我编译它(使用 Visual Studio 2017)时,我声明“test1”的行会导致“C2059:语法错误:'常量'”错误。我已经尝试在构造函数的定义中使用不带“const”的元素。

谢谢!

【问题讨论】:

  • 考虑向good C++ book学习。
  • 很遗憾,这次编译器错误颇有误导性。
  • 编译器将此视为名称 test1 的函数声明,它返回 CTest1 并且不接受那里的常量。 Hense 错误。 @songyuanyao 已经解释了如何解决它

标签: c++ constructor


【解决方案1】:

Default member initializer 仅适用于大括号或等于初始化程序。例如

class CTest2
{
public:
    CTest1 test1 = CTest1(BITMAP_1_ID, BITMAP_2_ID);
    CTest1 test2 {BITMAP_1_ID, BITMAP_2_ID};
};

或者你可以使用member initializer list

class CTest2
{
public:
    CTest2() : test1(BITMAP_1_ID, BITMAP_2_ID) {}
    CTest1 test1;
};

【讨论】:

    猜你喜欢
    • 2022-06-13
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多