首页 > 解决方案 > 带有 ctor 参数的项声明不能用作结构成员

问题描述

我有一个类在其构造函数中需要一个const size_t参数。当我使用它在堆栈上声明变量时,它按预期工作。但是如果我用它来声明另一个类的成员,我会得到一个编译器错误。通常,当我为参数使用命名变量时,我会得到“未知类型名称”,或者当我使用整数常量时会得到“预期的')'”。

该参数不用于分配;它只是存储在一个成员变量中。

这个小程序段说明了这个问题:

#include <iostream>
#include "QuickBin.h"

class useless
{
    const size_t m_size;
public:
    useless(const size_t s) : m_size(s)
    {
    }
    QuickBin m_store1(m_size); // Unknown type name 'm_size'
    QuickBin m_store2(40); // Expected a right paren
};

int main(int argc, const char * argv[]) {
    QuickBin locker(40); // No problem here; this works fine
    std::cout << "Hello, World!\n";
    return 0;
}



这是 QuickBin 的构造函数:

QuickBin::QuickBin(const size_t s)
{
    m_size = s;
}



我确信我遗漏了一些明显的东西,因为我在 Visual Studio 和 Xcode 中都收到了这段代码的错误。我的最终解决方案必须与 C++11 兼容。

实际课程中还有其他东西,但这与这个问题无关。不会发生内存分配。在过去的两天里,我一直睡眼惺忪,试图找到涵盖这一点的文档,但我却一无所获。我要强调的是,即使我使用命名变量作为参数,它也是一个常量,其值在编译时是已知的。有任何想法吗?

标签: c++c++11constructor

解决方案


推荐阅读