为什么我的默认参数被忽略
Why are my default parameters being ignored?
为什么我的默认/可选参数被忽略?
grid_model.h
class GridModel {
public:
GridModel();
void PrintGrid(bool);
};
grid_model.cpp
void GridModel::PrintGrid(bool flag = false) {
// things...
}
grid_model_test.cpp
ns::GridModel* gm = new GridModel();
gm->PrintGrid(true); // works
gm->PrintGrid(); // doesn't work
错误:
grid_model_test.cpp:22:12: error: no matching function for call to ‘ns::GridModel::PrintGrid()’
gm->PrintGrid();
^
In file included from grid_model_test.cpp:2:0:
grid_model.h:27:7: note: candidate: void ns::GridModel::PrintGrid(bool)
void PrintGrid(bool);
^~~~~~~~~
当我在其他地方使用它们时,它们似乎工作正常。
#include <iostream>
class Thing {
public:
void Whatever(bool);
};
void Thing::Whatever(bool flag = false) {
std::cout << "Parameter was: " << flag << std::endl;
}
int main() {
Thing* thing = new Thing();
thing->Whatever();
return 0;
}
默认参数值应作为一个良好的设计实践,而不是在声明中,而不是在实现中:
class GridModel {
public:
GridModel();
void PrintGrid(bool flag=false);
};
void GridModel::PrintGrid(bool flag) {
// things...
}
技术(如在此处所述,http://en.cppreference.com/w/cpp/language/default_arguments(:默认参数必须在呼叫的转换单元中可见。如果将类分开为grid_model.h和grid_model.cpp,则包括grid_model.h的其他任何.cpp(例如grid_model_test.cpp(不会意识到仅在grid_model.cpp中出现的信息。
相关文章:
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 为什么我的递归可变参数模板无法编译?
- 有没有办法根据 lambda 参数返回类型部分专用化我的模板化函数?
- 成员函数的"this"参数具有"const"类型,但我的函数实际上不是"const"
- 为什么我的一个宏参数被替换为')'而不是标识符?
- 我的重载运算符 == 中的 C++ 参数太少
- 我能知道我的函数有多少参数吗?
- 我的代码在作为参数传入 .begin() 时不起作用,但在我将 .begin() 转换为迭代器后工作
- 我应该使用 const shared_ptr<T>&or shared_ptr<T> 作为我的 lambda 函数的参数吗?
- 指定在用户固定我的应用程序时用于运行应用程序的命令参数
- 如果我的模板类型首先以lambda参数而发生,则MSVC会引起一个奇怪的错误
- 我是否误解了此默认参数共享的范围
- 为什么我的默认参数被忽略
- 为什么我的值没有由我的初始化(参数化)构造函数初始化?
- Arduino:如何将其他类的对象用作我的库的参数
- 为什么我的SFML将SF ::纹理作为参数传递到函数时会不断崩溃
- 如何让我的 strchr 函数同时将'const char'数组和'char'数组作为第一个参数?
- 我的二传手可以获取参数,但实际上不能?
- 我的类的可变参数模板构造函数无法修改我的类成员,为什么会这样?