使用动态分配的内存(指针)

时间:2012-10-05 18:00:59

标签: c++ visual-c++ pointers io dynamic-memory-allocation

我正在玩指针和动态内存,因为我正在尝试学习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;
}

有什么想法吗?在此先感谢您的帮助。

3 个答案:

答案 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;