【问题标题】:This declaration has no storage class or type specifier in C++此声明在 C++ 中没有存储类或类型说明符
【发布时间】:2026-02-16 06:40:01
【问题描述】:

我的程序中有多个课程。

A) 当我在另一个类中创建一个类的对象时,我没有收到任何错误,但是当我使用该对象调用函数时,我得到了上述错误。

B)此外,如果我创建另一个类的对象并在我的类的构造函数中使用它调用函数,那么我不会收到这样的错误。

C) Cout 函数在类的主体中不起作用,除非我把它放在任何函数中

D) 主类能够完成所有这些,我没有收到任何错误。

很高兴很快收到回复。提前谢谢你。

以下是代码:这是我的 cpp 中的两个类。除了在创建对象后使用对象外,我没有遇到任何问题。代码太大也不能贴出来。什么都可以在 main 中完成,但不能在其他类中完成,为什么?

 #include <iostream>
 #include <fstream>
 #include <iomanip>
 #include <string>
 #include <cstdlib> 
 #include <vector>
 #include <map>
 using namespace std;
 class Message
 {
    public:
    void check(string side)
   {
       if(side!="B"&&side!="S")
       {
           cout<<"Side should be either Buy (B) or Sell (S)"<<endl;;
       }
   }


};

class Orderbook
{
    public:
      string side;
      Orderbook()      //No Error if I define inside constructor
      Message m;       //No Error while declaring
      m.check(side);   //Error when I write m. or m->
};

【问题讨论】:

  • 听起来你把 expressions 放在只有 declarations 可以出现的地方。如果您向我们展示您的代码,帮助会容易得多...
  • @jrok 看来你现在可以帮助我了
  • 请编辑代码缩进样式以获得更高的一致性。 using namespace std; 是在上面吗?这两个类是在标题还是 cpp 中?包含哪些头文件?
  • 这段代码在很多方面都是错误的,我只想告诉你在尝试实现类似的目标之前了解更多关于 C++ 编程的知识。我已经正确缩进了你的代码。
  • 我已编辑并提供了附加信息。你能告诉我你看到的这么多错误中的一些吗?

标签: c++


【解决方案1】:

这是一个错误:

m.check(side);

该代码必须进入函数内部。 您的类定义只能包含声明和函数。

类不会“运行”,它们提供了如何制作对象的蓝图。

Message m; 行表示Orderbook 将包含Message,称为m,如果您稍后创建Orderbook

【讨论】:

  • s/Classes don't "run"/Class declarations don't "run"/
  • 非常感谢。我在类定义中调用了一个函数。它在函数内部工作正常。
  • @Jain 类、类声明和类定义都不运行。虽然我猜这一切都取决于你对“运行”的定义
【解决方案2】:

调用 m.check(side),意味着你正在运行实际代码,但你不能在 main() 之外运行代码——你只能定义变量。 在 C++ 中,代码只能出现在函数体内或变量初始化中。

【讨论】:

  • 如果它是一个初始化静态变量的函数,你可以在 main 之外运行代码。
【解决方案3】:

你可以在另一个类中声明一个类的对象,这是可能的,但你不能初始化那个对象。为此,您需要执行以下操作:--> (主内)

Orderbook o1;
o1.m.check(side)

但那是不必要的。保持简短:-

你不能在类中调用函数

【讨论】: