未定义的引用c ++丢失了

时间:2015-05-07 03:01:17

标签: c++ reference undefined

#include "assert.h"; // for some reason assert wouldn't work on my compiler without this
#include <iostream>
#include <string>
#include <limits>   // This is helpful for inputting values. Otherwise, funny stuff happens


using namespace std;


class Product
{
public:

    Product();
    Product(string the_name, int the_price, int number_of);

    string return_name();
    void reduce_amount();
    void print_data() const;

private:
    string prod_name; // name of your product
    int price_in_cents; // it's price in cents
    int amount; // the number of the product that you have
};

Product::Product()
{

    prod_name = "NULL_NAME: NEED DATA";
    price_in_cents = 0;
}

Product::Product(string the_name, int the_price, int number_of)
{
    assert(the_price>0);
    assert(number_of>0);
    assert(number_of<21);
    assert(prod_name !="NULL_NAME: NEED DATA");
    prod_name = the_name;
    price_in_cents = the_price;
    amount = number_of;
}

void Product::print_data() const
{
    cout<<prod_name << endl;
    cout<<"The price in cents is: " <<price_in_cents<< endl;
    cout<< "Amount left: " << " " << amount << endl;
}

void Product::reduce_amount()
{
    amount = amount -1;
}


string Product::return_name()
{
    return prod_name;
}

class Vending_Machine
{
public:

    Vending_Machine();
    void empty_coins();
    void print_vend_stats();
    void add_product();
    Product buy_product();
private:
    int income_in_cents;

    Product product1();
    Product product2();
    Product product3();
    Product product4();
    Product product5();
};

void Vending_Machine::empty_coins()
{
    cout << "The total amount of money earned today is " << income_in_cents << " cents" << endl;
    income_in_cents = 0;
    cout << "All the coins have been withdrawn. The balance is now zero." <<     endl;
}

void Vending_Machine::print_vend_stats()
{

    cout<< "Total income thus far: " << income_in_cents << endl;

    if (product1().return_name() != "NULL_NAME: NEED DATA")
    {
        //stuff happens
    }
}

int main()
{
    return 0;
}

所以,我不确定我是否正确地完成了所有的识别,但是我在自动售货机print_vend_stats()函数中遇到了布尔语句的问题。它说我正在为product1()制作一个未定义的fereence。这是什么意思?

1 个答案:

答案 0 :(得分:2)

宣布

Product product1();

你声明一个成员函数,括号是使它成为函数的原因。

如果放下括号

Product product1;

您声明了一个成员变量,这是Product类的实际实例。

另一个例子,你不会写,例如。

int income_in_cents();

income_in_cents声明为变量,现在好吗?

如果类型是int之类的基本类型,或类似Product之类的类型,那么成员变量就像在其他任何地方一样被声明为普通变量。