为什么我不能将“type'double'”设置为实体“type'double *'?”

时间:2014-10-15 03:03:24

标签: c++ function pointers

我的功能是

void BookRecord::getCost(double *c)
 {
 }

我应该将成员变量(double m_dCost)复制到函数指向的变量中。但是当我这样做的时候......

void BookRecord::getCost(double *c)
 {
   c = m_dCost;
 }

我的编译器告诉我"类型为' double'不能分配给' double *'类型的实体。"那为什么不呢?如果我不能这样做,我如何将成员变量复制到其中?

感谢任何和所有帮助。非常感谢!

编辑:对于那些说我没有看过任何东西的人,让我宣布一下我对C ++和编程的新手。也许我不太明白为什么双m_dCost和double * c是如此不同。

4 个答案:

答案 0 :(得分:5)

你应该试试这个:

*c =  m_dCost;

doubledouble *是不同的类型,您无法直接指定它们。您需要在此处使用取消引用(间接)运算符 *

参考:Dereference operator

答案 1 :(得分:3)

“c”是指向双变量的指针,但是,“m_dCost”是一个双变量,你应该使用“*”运算符来引用“c”指向的变量。

就像songyuanyao的解决方案:

*c =  m_dCost;

答案 2 :(得分:1)

c =  m_dCost;

这是一个无效的陈述......

c = &m_dcost;    

有效...这里c存储m_dcost的内存地址......

*c = m_dcost;     

也有效...它指向其内存地址存储在c。

中的变量

答案 3 :(得分:0)

在C和C ++中,double和double *是不同的类型。 double用于双精度浮点,但是后跟星号的任何类型都是它自己的类型,表示typename的指针。因此,double *只包含double变量的地址,而不包含变量本身。

如果您要尝试将m_dCost复制到c中,请执行以下操作:

void BookRecord::getCost(double *c)
{
    *c = m_dCost; // variable that c points to <- m_dCost
}

但我注意到你的问题是用C ++标记的。如果您使用的是C ++,那么您应该创建一个类,该类应该隐藏指针。

public class BookRecord
{
   public:
   BookRecord();
   double getCost();
   private:
   double _cost;
}
double BookRecord::getCost()
{
   return _cost; // Your function returns void and the "return value" is stored through a pointer
                 // Use a return statement instead for simplicity
}