我正在玩指针和动态内存,因为我正在尝试学习C ++,并且在编译时我不断收到此错误。
error C2678: binary '>>' : no operator found which takes a left-hand operand of type 'std::istream' (or there is no acceptable conversion)
我的代码如下:
int * ageP;
ageP = new (nothrow) int;
if (ageP == 0)
{
cout << "Error: memory could not be allocated";
}
else
{
cout<<"What is your age?"<<endl;
cin>> ageP; <--this is the error line
youDoneIt(ageP);
delete ageP;
}
有什么想法吗?在此先感谢您的帮助。
答案 0 :(得分:6)
指针ageP
指向内存,由此调用分配:ageP = new int;
您可以通过取消引用指针来访问此内存(即使用dereference operator:{{1} }):
*ageP
然后就像你使用 MEMORY
| |
|--------|
| ageP | - - -
|--------| |
| ... | |
|--------| |
| *ageP | < - -
|--------|
| |
类型的变量一样,所以在你使用类型为int
的变量之前:
int
现在它将成为:
int age;
cin >> age;
答案 1 :(得分:2)
问题是你需要一个int的引用,而不是int *。例如
int ageP;
cin >> ageP;
因此,删除也是不必要的,因为你不会使用指针。
希望它有所帮助。
答案 2 :(得分:2)
John基本上是正确的,你的问题是提供一个指向预期引用的指针。
但是,由于您正在尝试了解动态分配,因此使用自动变量不是一个好的解决方案。相反,您可以使用*
取消引用运算符从指针创建引用。
int* ageP = new (nothrow) int;
std::cout << "What is your age?" << std::endl;
std::cin >> *ageP;
delete ageP;