【发布时间】:2012-01-05 21:08:21
【问题描述】:
我有链接在一起的文件:
基本.h
#pragma once
extern const string APPLICATION_NAME;
应用程序.cpp
#include "basic.h"
const string APPLICATION_NAME = "MyApplication";
............
ErrorTables.h
class ErrorTable
{
public:
ErrorTable();
private:
map <index, errorRecord> _errorTable;
};
ErrorTables.cpp
#include "basic.h"
ErrorTable TheErrorTable;
ErrorTable::ErrorTable()
{
...
_errorTable[errorIndex] = errorRecord(APPLICATION_NAME + " hit some error.");
...
}
此代码可以在 Visual Studio 中构建和运行。 当我使用 GCC 时,它可以构建但在运行时失败。 问题出在具有静态链接的 TheErrorTable 中,并且是 在 main() 启动之前创建;它无法解析 APPLICATION_NAME 变量。 如果我使用局部变量隐藏它,一切正常。
是否有 GCC 标志在构建期间强制解析静态变量或 以其他方式实现 Visual Studio 的行为?
【问题讨论】:
-
你能发布你用来构建它的
g++命令(不是gcc)吗? -
哎呀。该链接读起来更像是“幽默”/咆哮,而不是常见问题解答或严重的语言批评。