【问题标题】:foo2.cpp:9: error: expected primary-expression before '(' tokenfoo2.cpp:9: 错误: '(' 标记之前的预期主表达式
【发布时间】:2012-06-09 12:41:12
【问题描述】:

这个文件有什么错误? 我明白了:

foo2.cpp:9: 错误: '(' 标记之前的预期主表达式 foo2.cpp:9:错误:“int”之前的预期主表达式 foo2.cpp:9: 错误: 预期 ';' '{' 标记之前
int main(void)
{
  class X {
    int i;
  public:
    X(int ii = 0);
  };

  X::X(int ii) { i = ii; }
  return 0;
}

【问题讨论】:

  • 我不是 C++ 专家,所以也许这是我从未想过的一些功能,但我认为你必须将类和方法移到 main() 之外。
  • @minitech 类没问题,问题出在方法上。
  • @LuchianGrigore:但是如果你将方法移出main(),那么类就必须遵循,对吧?
  • @minitech 如果将方法定义移到 main 之外,您还必须将类定义移到外面,是的。
  • 通常,您会将类包含在单独的 .h 文件和方法的 .cpp 文件中。但我认为 Luchian Grigore 解决了你的问题 :)

标签: c++


【解决方案1】:

您不能在 C++ 中嵌套函数。要修改您的程序,您有两种选择。你可以把你的类定义移到main之外,或者你可以把你的方法定义放在类里面:

第一种选择:

class X {
  int i;
public:
  X(int ii = 0);
};

X::X(int ii) { i = ii; }

int main(void)
{
  return 0;
}

第二种选择:

int main(void)
{
  class X {
    int i;
  public:
    X(int ii = 0) { i = ii; }
  };

  return 0;
}

【讨论】:

    【解决方案2】:

    首先,请问,为什么

    其次,不能在方法内部提供实现(包括main)。如果必须这样做,请保持内联实现:

    int main()
    {
      class X {
        int i;
      public:
        X(int ii = 0){ i = ii; }
      };
      return 0;
    }
    

    【讨论】:

    • 非常感谢!哎呀 :( 我刚开始 C++ 编码,所以我错过了我有一个嵌套函数的事实。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 2017-09-24
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多