构造对象作为ostream输出的一部分

时间:2018-01-23 02:09:58

标签: c++11 object ostream construction

如下所示的类声明:

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()中得到以下错误的错误:

  

错误:&#39; A&#39;不引用值

此错误的原因是什么?

3 个答案:

答案 0 :(得分:1)

您无法声明obj并将其输出到同一行。如果您希望obj在打印后仍然可用,请执行以下操作:

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

否则,请跳过obj以支持临时对象:

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

答案 1 :(得分:1)

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

} ,然后将其发送到(A) i。然后直接丢弃临时A对象。

如果你想保留它,你必须在它自己的声明中声明它的名称。

答案 2 :(得分:0)

您需要先在第一个代码行输出消息“值为”。在第二个代码行上,您将创建A类型的对象obj,它将输出i。

int main()
{
    int i;
    cout << "The value is ";
    A obj(i);
    return 0;
}