1

对于如下的类声明:

class A{
public:
A(int);
~A()
private:
int a;
};

以及构造函数定义如下:

A::A(int i){
 a = i;
 cout << a << endl;
}

我想从 main() 做这样的事情:

int main(){
int i;
//user input for value
//stored inside i
cout << "The value is " << A obj(i);
return 0;
}

我现在在 main() 中收到上述代码的以下错误:

错误:“A”没有引用值

这个错误的原因是什么?

4

3 回答 3

1

您不能obj在同一行声明和输出它。如果您想obj在打印后保持可用,请执行以下操作:

A obj(i);
cout << "The value is " << obj;

否则,跳过obj有利于临时对象:

cout << "The value is " << A(i);
于 2018-01-23T02:13:18.547 回答
1

你不能在另一行中间有一个声明。

可以做的是通过强制转换动态创建 A (A) i,或者简单地说A(i),这会将 inti转换为 A,然后将其发送到cout. 然后直接丢弃临时 A 对象。

如果你想保留它,你必须在它自己的声明中为它声明一个名字。

于 2018-01-23T02:13:59.297 回答
0

您需要首先在第一行代码中输出消息“The value is”。在第二行代码中,您创建类型 A 的对象 obj,它将输出 i。

int main()
{
    int i;
    cout << "The value is ";
    A obj(i);
    return 0;
}
于 2018-02-05T03:11:05.033 回答