以下代码段是头文件和实际的main()
函数。我在Windows 10中使用Visual Studio 2017。
·H
#ifndef SALES_DATA_H
#define SALES_DATA_H
#include <iostream>
using namespace std;
struct Sales_data
{
int amount;
int rate;
int price = amount * rate;
};
#endif
的.cpp
#include <iostream>
#include "Sales_data.h"
using namespace std;
int main()
{
Sales_data item1;
cout << "Enter rate and amount" << endl;
cin >> item1.rate >> item1.amount;
cout << item1.price << endl;
cin.get();
cin.get();
return 0;
}
它一直显示为输出:“687194768”。
我也尝试过初始化变量,但似乎没有用。
答案 0 :(得分:3)
你可能想要的是:
struct Sales_data
{
int amount = 0;
int rate = 0;
int price() const { return amount * rate; }
};
然后
std::in >> item1.rate >> item1.amount;
std::cout << item1.price() << std::endl;
答案 1 :(得分:2)
此处的价格仅在初始化时计算以获得其初始值,但由于amount
和rate
尚未初始化,结果为 undefined 。
它不是一个功能。
struct Sales_data
{
int amount;
int rate;
int price = amount * rate;
};
你很可能想要一个功能,例如:
struct Sales_data
{
int amount;
int rate;
int calcPrice()
{
return = amount * rate;
}
};
std::cout << item1.calcPrice() << std::endl;
或者您必须重构以初始化amount
和rate
以使用此类语法,例如:用构造函数。
struct Sales_data
{
int amount;
int rate;
int price = amount * rate;
Sales_data(int amount, int rate) : amount(amount), rate(rate) {}
};
Sales_data x(10, 5);
//x.price == 50
答案 2 :(得分:0)
代码打印的原因是因为您使用未初始化的变量计算该价格......
在struct中定义一个函数,并在给出输入后调用它
void calculatePrice() {
price = amount * rate;
}
cin >> item1.rate >> item1.amount;
item1.calculatePrice();
cout << item1.price << endl;
答案 3 :(得分:0)
正如其他人所评论的那样,Sales_data
的定义在初始化之前使用amount
或rate
。这是未定义的行为,您的编译器或多或少可以随心所欲地做任何事情。
许多编译器会使用某种可识别的保护值(一种流行的选择是0xDEADBEEF)初始化变量,以便在使用调试器查看值时未使用该值时非常明显。在这种情况下,看起来你的编译器使用0xCCCCCCCC作为保护值:
(lldb) p (int) 0xcccccccc * (int) 0xcccccccc
(int) $2 = 687194768