c++ - 带有 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 兼容。
实际课程中还有其他东西,但这与这个问题无关。不会发生内存分配。在过去的两天里,我一直睡眼惺忪,试图找到涵盖这一点的文档,但我却一无所获。我要强调的是,即使我使用命名变量作为参数,它也是一个常量,其值在编译时是已知的。有任何想法吗?
解决方案
推荐阅读
- sql - 我的数据库是否必须反映我的 ERD 图?
- bash - 将 npm 描述传递给 npm 脚本命令
- markdown - !implicit_figures 中的错误:无效的参数类型
- python - 列出给定长度的分组
- mysql - 在 H2 中初始化数据时从文件中加载数据
- ajax - How to detect adblock without changing or refreshing URL
- java - Spring security oauth2 在 30 秒后未能通过颁发者验证
- javascript - 使用 indexof 方法我可以找到字符串中的值
- c# - 在电子邮件正文中添加 SQL 数据库值
- python - 无法将列表中的长字符串与列表中的短字符串连接起来