1

刚刚开始将我的项目转移到 Xcode,并且在尝试构建我的项目时,我的构造函数定义出现错误。在默认构造函数上,我得到“预期的成员名称或';' 在声明说明符之后”和另一个构造函数我得到:

  1. “预期的 ')'”
  2. 字段的类型不完整 'Button::Button'
  3. 非朋友级成员“字符串”不能有限定名


#include <string>

#ifndef BUTTON_H
#define BUTTON_H

namespace interface1
{
class Button
{
    private:
        std::string name;
        float xPos;
        float yPos;
        float width;
        float height;

    public:
        //Default constructor
        Button::Button();
        //Constructor with id, x, y, width and height parameters
        Button::Button(std::string, float, float, float, float); 

        //Getters and setters
        std::string getName();
        float getX();
        void setX(float);
        float getY();
        void setY(float);
        float getWidth();
        void setWidth(float);
        float getHeight();
        void setHeight(float);
        bool isClicked(int, int);
        void draw(int, float, float, float, float);
};
}
#endif

知道出了什么问题吗?

4

1 回答 1

2

由于构造函数在您的类定义中,因此与其他成员函数一样,它们不需要Button::前缀。有些编译器仍然接受额外的限定,有些则不接受。

class Button {
    Button(); //already in class scope, so no extra qualification needed
};

另一方面,当您在类之外定义这些成员时,您确实需要资格。否则,它会创建一个新函数(至少对于具有返回类型的非构造函数):

class Button {
    Button();
    void foo();
};

void foo(){} //new function, not Button::foo()
void Button::foo(){} //definition of member function
Button::Button(){} //definition of constructor
于 2013-03-05T18:09:54.510 回答