【发布时间】:2021-12-15 21:44:24
【问题描述】:
我正在尝试通过数组迭代对象来设置这些对象的不同属性。我的对象的属性可能会随着时间而改变。
我的代码作为一个简化的例子:
// MyClass.h
class MyClass
{
/* class definitions */
};
extern MyClass object;
// MyClass.cpp
#include MyClass.h
/* Constructors, Destructors, Functions */
// main.cpp
void reload_objects();
int main()
{
MyClass object[20];
reload_objects();
{
void reload_objects();
{
for (int i = 0; i < 20; i++){
object[i].setProperties(/*args*/);
}
}
我收到一个错误error: No match for 'operator[]' (operand types are ‘MyClass’ and ‘int’)。如果我将 for 循环移到 main 中,它会编译并运行良好。
是什么导致了这个错误?
以某种方式使用std::vector<MyClass> object(20) 会更容易还是更好?
【问题讨论】:
-
这是一个范围问题:
object在main中定义,但您的函数reload_objects没有以文本形式包含在main中,因此数组object在那里不可见。相反,您的函数会看到全局变量extern MyClass object。 -
变量的作用域对于 C++ 来说是如此的基础,以至于它很早就在最基本的介绍性文本中被引入。您遇到此问题的事实表明,您已经开始以最少(甚至可能为零)的努力来阅读介绍性材料。您需要阅读该材料,因为它是如此基础 - 如果没有基本的努力来获得这种理解,您就是在浪费您的时间以及您寻求帮助的任何人的时间。
-
@VictorEijkhout 啊,所以我只是在错误的范围内声明了
object。 -
@Peter 你说得对,错过这是一件非常愚蠢的事情。感谢您如此直率地指出如此简单而愚蠢的错误。我太笨了你必须自我感觉良好才能如此聪明。