代码之家  ›  专栏  ›  技术社区  ›  Dewfy

G++外部引用错误

  •  2
  • Dewfy  · 技术社区  · 15 年前

    我有在G++上复制的问题。VC++没有遇到任何问题。 所以我有两个cpp文件:

    1.CPP:

    #include <string>
    #include <iostream>
    
    extern const std::string QWERTY;
    
    int main()
    {
        std::cout << QWERTY.c_str() << std::endl;
    
    }
    

    2.CPP:

    #include <string>
    const std::string QWERTY("qwerty");
    

    没有魔法,我只想把字符串常量放在单独的文件中。在链接时,ld会产生一个错误:“未定义的对‘‘qwerty’的引用。” 第一种将两个声明包装成“extern”c“的想法没有帮助。错误和非C++的QWWTY仍然存在。

    提前谢谢你的建议

    2 回复  |  直到 15 年前
        1
  •  6
  •   Community CDub    7 年前

    看起来你可能碰到了这个标准:

    在C语言中,文件中一个常量限定对象。 没有显式存储的作用域 类说明符具有外部链接。 在C++中,它具有内部链接。

    将此更改为2.cpp:

    #include <string>
    extern const std::string QWERTY("qwerty");
    

    在这个问题中,“联系”的含义有更多的细节。- What is external linkage and internal linkage in C++ .

        2
  •  0
  •   Pieter    15 年前

    我必须查找它,但是我认为COST全局变量在C++中有内部链接,不要使用 const 它会编译得很好。

    1.cpp
    
    ...
    extern std::string QWERTY;
    ...
    
    2.cpp
    #include <string>
    std::string QWERTY("qwerty");
    

    当然,也可以在公共头中将其声明/定义为常量字符串。

    添加多余的 extern 到2.cpp也可以编译它,但我不确定这是标准的还是一些g++“额外的”