回 帖 发 新 帖 刷新版面

主题:typedef的问题

AdditionProblem 和 Queue是我定义的两个类;
主程序中有如下语句
Queue problemQueue;
int myAddend = 100;
AdditionProblem problem(myAddend);
problemQueue.enqueue(problem);

其中
AdditionProblem::AdditionProblem(int maxAddend = 10)
{
   .......
}

typedef int QueueElement;
Queue::enqueue(const QueueElement &value)
{
  .......
}
此时程序顺利通过。

问:为什么当我直接用int代替QueueElement时,vc2010会报错
error C2664: “Queue::enqueue”: 不能将参数 1 从“AdditionProblem”转换为“const int &” 
原因如下: 无法从“AdditionProblem”转换为“const int”
        没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符


回复列表 (共6个回复)

沙发

problemQueue.enqueue(problem);

problem是AdditionProblem类型,而problemQueue.enqueue需要的是一个int类型的参数。因此编译器提示不能将参数 1 从“AdditionProblem”转换为“const int &”。
这个是比较明显的错误了。

板凳


我想问的是为什么当使用
 typedef int QueueElement
 Queue::enqueue(const QueueElement &value)
时,能在VC2010下顺利通过

3 楼

你换个编译器试试,看看能通过否,如果不能通过,是不是可以理解为VS2010不太严谨?

4 楼

这句话说的好:可以理解为 VS2010 不太严谨

楼主的写法无疑是错误的,即使通过了编译也是错误的

这和 VS2010 处理引用的机制有关,当然 VS2010 在这里犯了错误

5 楼

tianyuan008回来啦[em2]

6 楼

貌似不是這原因,AdditionProblem類里可能有關于QueueElement強轉的函數,故而可以如此使用。
樓主關鍵代碼不夠,所以只能如此猜測。

我来回复

您尚未登录,请登录后再回复。点此登录或注册