【问题标题】:Error While Compiling this C++ code编译此 C++ 代码时出错
【发布时间】:2012-02-16 17:26:26
【问题描述】:

编译此 c++ 代码时出现以下错误。这可能是什么原因?

     # include <iostream>
     # include <stdio.h>
     # include <conio.h>

     using namespace std;

     class Foo
     {
      int a;
      public :
      virtual void Fun1(); 

      Foo()
      {a=5;}
     };

     Class X: public Foo   // Error class does not name a type
     {
      Foo f;
      public:
      void Fun1() { }       
      X()
      {
       memset(&f,0x0,sizeof(f));
      }
     };

     int main()
     {
      X x; // Error 'X undeclared and expected ; before x, i guess because of first one
      getch();
      return 0;
      }

【问题讨论】:

    标签: c++


    【解决方案1】:

    关键字class 以小写c 开头。这将修复您报告的错误,但仍然存在更多错误。

    你声明了Foo::Fun1,但没有定义它。

    最后,您需要在 std::memset 的声明中包含 &lt;cstring&gt;。另一个标题可能间接包含它,但您不能依赖它。

    然后您将有未定义的运行时行为,因为使用 memset 覆盖非 POD 对象是无效的 - Foo 具有虚函数,因此不是 POD。

    【讨论】:

    • 我更正了大小写错误,但在编译时仍然出现一些链接器错误。是因为我使用的 memset 代码吗?你能解释一下吗。我还在 X 类中定义了 Fun1() {cout
    • 如果你定义了Foo::Fun1,就不应该出现链接错误。究竟是什么错误?
    • @Ritesh:如果您还没有定义Foo::Fun1(或者如果您还没有定义另一个虚函数),您将收到该错误。你确定你已经定义了吗?
    • 我猜你的答案是:-然后你会有未定义的运行时行为,因为使用 memset 覆盖非 POD 对象是无效的 - Foo 有一个虚函数,所以不是 POD。非常正确,唯一的事情是我得到一个编译器链接错误而不是运行时错误
    • @Ritesh:我刚刚在您的第一条评论中注意到,您说您定义了X::Fun1。您还需要定义Foo::Fun1 来修复链接错误。
    【解决方案2】:

    Class 应该是 class

    【讨论】:

      【解决方案3】:

      Class X: public Foo 应该是class X: public Foo,这应该可以修复这两个错误。

      【讨论】:

        【解决方案4】:

        C++ 语言区分大小写,并且要求其关键字以小写形式书写。 class 是有效的 C++ 关键字,但 Class 不是。声明类 X 时将 Class 重命名为 class

        【讨论】:

          【解决方案5】:

          Class X 以大写 C 命名。这就是问题所在。

          【讨论】:

            【解决方案6】:

            您的错误实际上始于: Class X: public Foo // Error class does not name a type Class 必须是 class

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-01-15
              • 2011-01-22
              • 2023-03-09
              • 1970-01-01
              • 1970-01-01
              • 2020-12-03
              • 2016-03-16
              • 2023-03-10
              相关资源
              最近更新 更多