0

我知道以前似乎有人问过这个问题,但我环顾四周,该static方法对我不起作用。这是我的代码:

struct Customer {
public:
    string get_name();
private:
    string customer,first, last;
};

这是我调用函数的地方:

void creation::new_account() {
Customer::get_name(); //line it gives the error on.
}

这是一些编译良好的代码示例。

struct Creation { public: string get_date(); private: string date; };

然后我用同样的方式称呼它

void Creation::new_account() { Creation::get_date();}

因此,我很困惑为什么一个有效而另一个无效。

编辑:好的,我明白了,我刚刚意识到我在函数定义中调用另一个结构的函数,该函数定义是不同类的一部分。明白了,感谢所有回答的人

4

3 回答 3

1

它没有被声明static(需要是static std::string get_name();)。但是,get_name()forCustomerCustomer实例的特定属性,因此拥有它static没有意义,对于Customer. 声明一个对象Customer并使用它。将名称提供给 的构造函数是有意义的Customer,因为如果没有名称,客户肯定无法存在:

class Customer {
public:
    Customer(std::string a_first_name,
             std::string a_last_name) : first_name_(std::move(a_first_name)),
                                        last_name_(std::move(a_last_name)) {}
    std::string get_name();
private:
    std::string first_name_;
    std::string last_name_;
};

声明一个实例Customer

Customer c("stack", "overflow");
std::cout << c.get_name() << "\n";
于 2013-10-02T07:11:44.980 回答
0

由于您get_name的未声明为静态的,因此它是一个成员函数。

你的Customer类中可能需要一些构造函数。假设你有一些,你可以编码

 Customer cust1("foo123","John","Doe");
 string name1 = cust1.get_name();

您需要一个对象(此处cust1)来调用其get_name成员函数(或方法)。

花很多时间阅读一本好的 C++ 编程书籍。

于 2013-10-02T07:11:24.603 回答
0

“这个static方法对我不起作用”。这不是一种方法,而是语言的工作方式。

如果你想调用一些没有具体对象的方法,你需要它是静态的。否则,您需要一个对象。

您的代码将与以下之一一起使用:

struct Customer {
public:
    static string get_name();
private:
    string customer,first, last;
};

或者

void creation::new_account() {
    Customer c;
    //stuff
    c.get_name();
}
于 2013-10-02T07:12:44.780 回答