【问题标题】:Simple C++ code not working简单的 C++ 代码不起作用
【发布时间】:2008-11-05 22:48:03
【问题描述】:

这个非常简单的代码给了我很多错误:

#include <iostream>
#include <string>

int main() {
    std::string test = " ";
    std::cout << test;
}

我尝试在 linux 上通过在控制台上输入 gcc -o simpletest simpletest.cpp 来编译它。我不明白为什么它不起作用。发生了什么?

【问题讨论】:

    标签: c++ gcc g++


    【解决方案1】:

    尝试使用“g++”而不是“gcc”。

    【讨论】:

    • 实际上,c++ 有一个特殊的让步,即允许 main 没有 return 语句,即使它声明返回一个 int。在这种情况下,它将隐式返回正确的成功值,通常为 0。
    • @Evan:我没有意识到这一点。我必须测试我的各种 C++ 编译器,看看哪些编译器真正实现了该功能。
    • 声明为返回值(例如 int)但实际上没有 return 语句的函数将被编译,应该导致警告而不是错误,并且将运行时返回垃圾值。我相信“特殊让步”是让 main() 返回一个合理的 0 而不是垃圾。
    【解决方案2】:

    补充其他人所说的:g++ 是 GNU C++ 编译器。 gcc 是 GNU 编译器集合(不是 GNU C 编译器,正如许多人所假设的那样)。 gcc 在编译 C++ 源代码时充当 g++ 的前端。 gcc 可以编译C、C++、Objective-C、Fortran、Ada、汇编等。

    gcc编译失败的原因是你需要在C++标准库中链接。默认情况下,g++ 会这样做,但gcc 不会。要使用 gcc 链接 C++ 标准库,请使用以下命令:

    gcc -o simpletest simpletest.cpp <b>-lstdc++</b>

    【讨论】:

    • 解决了链接错误,但原发帖人抱怨编译错误;
    • 原始发帖人没有说明他是遇到编译器错误还是链接器错误,但是如果您自己使用 gcc 编译该代码,您会遇到链接器错误。
    【解决方案3】:

    试试:

    g++ -o simpletest simpletest.cpp
    

    【讨论】:

      【解决方案4】:

      试试g++ -o simpletest simpletest.cpp。 gcc 是 C 编译器,而 g++ 是 C++ 编译器,它还链接所需的 C++ 库。

      此外,您必须在 main() 函数的末尾添加一个 return 0;

      【讨论】:

      • 实际上,c++ 有一个特殊的让步,即允许 main 没有 return 语句,即使它声明返回一个 int。在这种情况下,它将隐式返回正确的成功值,通常为 0。
      • gcc 实际上是 GNU 编译器集合;您仍然可以使用 gcc 编译 C++ 代码,但您必须使用 -lstdc++ 选项显式链接到 C++ 标准库。
      • C99 也对糟糕的编码实践做出了同样可怕的让步(也就是说,您可以省略 main() 末尾的 return 并且它等效于 return(0); 在主要())。
      【解决方案5】:

      如果你的编译器很挑剔,你可能想在最后添加所有重要的return 0;

      【讨论】:

      • 在标准 C++ 中不需要——在 C99 中也不需要。也就是说,我会添加显式返回;隐式返回非常讨厌。
      【解决方案6】:

      您声明您的main() 为返回int,但您没有返回语句。添加return 0; 看看是否有帮助。如果这不能解决您的问题,请尝试编辑您的帖子以包含您遇到的错误中的一些代表性行,也许我们可以为您提供更好的帮助。

      【讨论】:

      • 问题是我使用了错误的编译器......虽然我可以看到缺少的 return 语句,即使它没有引发任何警告或错误,但它一定是不好的做法。谢谢
      • 实际上,c++ 有一个特殊的让步,允许 main 没有 return 语句,即使它声明返回一个 int。在这种情况下,它将隐式返回正确的成功值,通常为 0。
      • @Evan:有趣...我曾经将 main() 声明为 void,因此当我使用支持它的编译器时,我不必返回某些内容。不过 G++ 不喜欢这样,所以我必须将其设为 int 并返回 0。
      • 将 main() 声明为 void 总是错误的,除非您有意依赖特定实现的扩展。
      【解决方案7】:

      g++ 对我来说也是正确的答案,我投了赞成票,谢谢。

      但是我的代码,自 1998 年 2 月 13 日以来一直在使用(第一条评论),用于计算我们孩子的保姆的有效总工资和预扣税,即使对于 g++ 来说也太简单了。就上面的例子而言,我的 Stroustrup 第二版兼容恐龙是:

      // too simple!
      
      #include <iostream.h>
      #include <stdlib.h>
      
      main() {
          cout << "Hello World!" << endl;
      }
      

      这将为您提供一个完整的错误消息终端窗口。除花括号外的所有内容都是错误!而且它缺少一条返回线。时间是,这将在商业 C++ 开发环境中正确编译和运行......

      踢它新学校,我现在正在使用: // 足够简单

      #include <iostream>
      #include <stdlib.h>
      
      int main(int argc, char* argv[] ) {
          std::cout << "Hello World!" << std::endl;
      //  TODO - this ought to return success, 0
      }
      

      最初的提问者有 std::cout 并使用了来自

      的字符串
       <string>...  
      

      “简单”是一个相对术语...

      比尔

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 2021-01-07
        • 1970-01-01
        相关资源
        最近更新 更多