1

当我尝试学习 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;
}

有任何想法吗?在此先感谢您的帮助。

4

3 回答 3

6

您有指向ageP内存的指针,由此调用分配:ageP = new int;您可以通过取消引用指针来访问此内存(即通过使用取消引用运算符: *ageP):

  MEMORY
|        |
|--------|
|  ageP  | - - - 
|--------|      |
|  ...   |      |
|--------|      |
| *ageP  | < - -
|--------|
|        |

然后就像你使用变量类型一样int,所以在你使用这样的类型变量之前int

int age;
cin >> age;

现在它会变成:

int *ageP = new int;
cin >> *ageP;
于 2012-10-05T18:21:52.697 回答
2

问题是您需要对 int 的引用,而不是 int*。例如

int ageP;
cin >> ageP;

因此,删除也是不必要的,因为您不会使用指针。

希望能帮助到你。

于 2012-10-05T18:08:25.497 回答
2

约翰基本上是正确的,你的问题是提供一个需要引用的指针。

但是,由于您正在尝试了解动态分配,因此使用自动变量并不是一个好的解决方案。相反,您可以使用*解引用运算符从指针创建引用。

int* ageP = new (nothrow) int;
std::cout << "What is your age?" << std::endl;
std::cin >> *ageP;                                           
delete ageP;
于 2012-10-05T18:15:35.763 回答