C++ 模板未报告局部变量的错误
c++ template not reporting error for local variable
为什么会报告错误:
class a {
public:
void b() {this->c++;}
};
int main() {
a var;
}
但这不行吗?
template <typename d> class a {
public:
void b() {this->c++;}
};
int main() {
a<int> var;
}
尽管"a"是一个模板化类,但函数"b",或者至少是对变量"c"的访问,不依赖于类型"d",所以它应该报告一些东西。
但是,如果我在主函数中调用"var.b();",它会给出一个错误。
我知道这是一个简单的问题,我真的想不通。
这是因为函数a<int>::b()
没有实例化,因为它是一个模板。当你尝试实例化它时,即像var.b();
一样调用它,编译器会吐出一个错误。您必须了解模板是"按需"实例化的,即当编译器需要实例化时。否则,只会进行最少的语法验证。关于模板中的实例化/名称查找的细节是一个相当复杂的主题,我强烈推荐这本书:C++模板:David Vandevoode和Nicolai Josuttis的完整指南。
第一个代码片段并非如此:函数必须从一开始就有效。
相关文章:
- 修复未初始化的局部变量错误
- 未初始化的局部变量错误甚至认为我初始化了它(C++)
- 我创建的类似乎错误地设置了它的局部变量
- 分配给静态变量的局部变量;编译错误在'c'但在 C++ 中成功
- 静态局部变量会被错误地优化吗?
- 错误 C4700:使用未初始化的局部变量'result'
- 尝试声明函数的局部变量,但得到范围错误
- 指针被分配给错误的局部变量
- 错误 C4700:使用未初始化的局部变量'enemyHealth'
- 在c++上创建税务计算程序,错误为未初始化的局部变量
- C++错误 C4700:使用未初始化的局部变量'i'
- 我不断收到错误:运行此代码时重新定义'i'。对局部变量的误解
- 从函数中引用局部变量不会给出错误
- 错误 C4700:使用未初始化的局部变量'A'
- C++:使用错误 C4700 未初始化的局部变量""
- 错误 C4700:使用未初始化的局部变量'lowest'
- 错误 1 错误 C4700:未初始化的局部变量'rate'并在C++中'hours'
- 全局变量如何在销毁时产生错误,而局部变量却不会
- 未初始化的局部变量使用错误
- 如何在循环外打印总和?我认为全局变量和局部变量的减速存在一些错误