我试图通过重载*运算符直接访问指针类中的整数,但似乎VC ++ 10不允许它。请帮助:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int MAX7 = 10;
struct node{
int value;
node *next;
};
struct node *head = NULL;
struct node *current = NULL;
int count = 0;
class SmartPointer{
public:
SmartPointer(){
}
int push(int i){
if(count == MAX7) return 0;
if(head == NULL){
head = new node();
current = head;
head -> next = NULL;
head -> value = i;
count = 1;
}
else{
struct node *ptr = head;
while(ptr->next != NULL) ptr = ptr->next;
ptr->next = new node;
ptr = ptr->next;
ptr->next = NULL;
ptr->value = i;
count++;
}
return 1;
}
void Display(){
node *ptr = head;
while(ptr != NULL){
cout << ptr->value << "(" << ptr << ")";
if( ptr == current )
cout << "*";
cout << ", ";
ptr = ptr->next;
}
}
int operator *(){
if(current == NULL) return -1;
struct node *ptr = current;
return ptr->value;
}
};
int main(){
SmartPointer *sp;
sp = new SmartPointer();
sp->push(99);
for(int i=100; i<120; i++){
if(sp->push(i))
cout << "\nPushing ("<<i<<"): Successful!";
else
cout << "\nPushing ("<<i<<"): Failed!";
}
cout << "\n";
sp->Display();
int i = *sp;
getch();
return 0;
}
错误# 1&gt; test7.cpp(71):错误C2440:'初始化':无法从'SmartPointer'转换为'int' 1 GT;没有可用于执行此转换的用户定义转换运算符,或者无法调用运算符
答案 0 :(得分:1)
sp
不是智能指针 - 它是指向SmartPointer
类的普通旧哑指针。 *sp
使用内置解除引用运算符,生成SmartPointer
类型的左值。它不会调用SmartPointer::operator*()
- 为此,您需要编写**sp
(两颗星)。
为什么要在堆上分配SmartPointer
实例并不清楚。这是一个不寻常的事情(也是,你泄漏它)。
SmartPointer sp;
sp.push(99);
等等。
答案 1 :(得分:0)
简短回答:
int i = **sp;
您不应该使用new分配对象。你的代码看起来像java。在C ++中,您必须删除使用new分配的所有内容。在C ++中,您可以编写:
SmartPointer sp;
sp.push(99);
int i = *sp;