无法从main中的公共类调用函数...“可能无法在返回类型中定义新类型”

时间:2013-11-23 21:31:48

标签: c++ oop object

我试图在公共类中调用void函数,但是我得到了我不明白的错误:

#include <iostream>
class Buttons
{
    public:
        Buttons()
        {
            short pushl;
            short *tail;
            cout << "Wally Weasel" << "/t";
            void init_sub(int x, int y);
        };
        ~Buttons()
        {
            cout << "Buttons has been destroyed!";
        };
}
int main(int args, char**LOC[])
{
    int z, a;
    Buttons::init_sub(z, a);
    return 2;
}
Buttons::void init_sub(int x, int y)
{
    cout << &x << &y;
}

新更新的代码(仍然无效):

#include <iostream>
using namespace std;

class Buttons
{
  public:
  Buttons()
  {
    short pushl;  // unused variable in Constructor: should be a member variable?
    short *tail;  // same
    cout << "Wally Weasel" << "/t";
  };

  ~Buttons()
  {
    cout << "Buttons has been destroyed!";
  }

 void init_sub(int z, int a);
};


int main(int args, char **LOC[])
{
    int z = 0;
    int a = 1;
    Buttons::init_sub(z, a);
    return 2;
}

void Buttons::init_sub(int x, int y)
{
    cout << &x << " " << &y;
}

为什么我不能调用该函数?

原始错误持续存在:“可能无法在返回类型中定义新类型”

PS:我更新了我的代码以匹配我的情况的当前状态 - 尽管仍然是相同的错误。  我一直在努力克服C ++ - 我习惯于低级编程而没有语法/结构化所涉及的语义。

3 个答案:

答案 0 :(得分:1)

函数init_sub在错误的位置声明。必须将它从构造函数体移动到类声明中。

您无法调用该函数,因为它是非静态成员函数。它需要一个实例来调用该函数。你没有供应一个。在实例上调用它,或使其静态。

您的主要功能也有错误的签名。它应该是

int main(int argc, char* argv[])

答案 1 :(得分:0)

“init_sub”在构造函数内声明。如果你想通过类本身调用它,它也必须是静态的。

答案 2 :(得分:0)

我认为这就是你要做的。请尝试缩进代码,特别是在向其他人寻求帮助时。

编译版本:http://ideone.com/9lGDvn

#include <iostream>
using namespace std;

class Buttons
{
  public:
  Buttons()
  {
    short pushl;  // unused variable in Constructor: should be a member variable?
    short *tail;  // same
    cout << "Wally Weasel" << "\t";  // Corrected tab character
  };

  ~Buttons()
  {
    cout << "Buttons has been destroyed!";
  }

  static void init_sub(int z, int a);
};

// Note that second argument to main should be char* loc[], one fewer pointer attribute
int main(int args, const char* const LOC[])
{
    int z = 0;
    int a = 1;
    Buttons::init_sub(z, a);
    return 2;
}

void Buttons::init_sub(int x, int y)  // not "Buttons::void"
{
    cout << &x << " " << &y;
}