我有一些代码基本上是这样的:
#include "MyClass.h"
#include <iostream>
using namespace std;
const char *items[4] = {"apple", "orange", "banana", "pear"};
MyClass::MyClass () {
cout << "items: " << items[0] << items[1] << items[2] << items[3] << endl;
}
在另一个类实现文件中,我有另一个名为 items 的全局变量,它是另一种类型(自定义类)的数组。两个实现文件都不包含另一个,所以我认为范围会有所不同,在两个地方使用项目作为变量名称应该没问题。此外,如果我删除任一类中的项声明,则编译器会抱怨在该类中使用的位置未定义它。这似乎支持了我的信念,即范围应该是分开的。然而,当我运行它时,输出每次都是"lnU knUVWnUjnU。如果我将另一个类中的项目类型也更改为 const char* 数组,那么它在每个类中都像我所期望的那样工作。不幸的是,代码依赖于一堆其他代码,因此很难给出一个工作示例。如果这很重要,我正在使用 gcc 4.3.2。谁能阐明这里发生了什么?
我没有看到一团糟的代码。您可以准备一个简单的示例。没有它,很难说为什么垃圾会被打印出来,
在代码片段中,您显示数组项具有内部链接。因此,模块中任何其他具有相同名称的声明都不会影响此模块。
如果同一模块中的相同名称声明为具有内部和外部链接,则程序可以具有未定义的行为。但是我什么也说不出来,因为我没有看到一个简单的程序来演示这个问题。