C++ 错误提示 传入的参数类型不能自动转换,

小灰灰诶~ 2017-09-25 03:17:57
#include <iostream>
#include "myarray.h"
#include "arrayiterator.h"
#include "display.h"
#include "student.h"

using namespace std;

int main() {

myarray<student *> ary_s;
student *n1 = new student("Tom", 80);
student *n2 = new student("Jone", 75);
student *n3 = new student("Anna", 90);
ary_s.add(n1);
ary_s.add(n2);
ary_s.add(n3);

arrayiterator<student *> start(ary_s.Begin());
arrayiterator<student *> end(ary_s.End());

display<arrayiterator<student *> >(start, end);

return 0;
}

这个是主函数, myarray<student *> ary_s; 这里传入的是 指针。

#ifndef _MYARRAY_H_
#define _MYARRAY_H_
#include <stdio.h>
#include<iostream>
using namespace std;
template <class T>

class myarray
{
private:
int m_nTotalSize;
int m_nValidSize;
T*m_pData;
public:
myarray(int nSize=3)
{
m_pData=new T[nSize];
m_nTotalSize=nSize;
m_nValidSize=0;
}
void add(T value)
{
if(m_nValidSize<m_nTotalSize)
{
m_pData[m_nValidSize]=value;
m_nValidSize++;
}
else
{
int i=0;
T*tmpData=new T[m_nTotalSize];
for(i=0;i<m_nTotalSize;i++)
{
tmpData[i]=m_pData[i];
}
delete []m_pData;
m_nTotalSize*=2;
m_pData=new T[m_nTotalSize];
for(i=0;i<m_nValidSize;i++)
{
m_pData[i]=tmpData[i];
}
delete []tmpData;
m_pData[m_nValidSize]=value;
m_nValidSize++;
}
}
int GetSize()
{
return m_nValidSize;
}
T Get (int pos)
{
return m_pData[pos];
}
virtual~myarray()
{
if(m_pData!=NULL);
{
delete []m_pData;
m_pData=NULL;
}
}
T*Begin()
{
return m_pData;
}
T*End()
{
return m_pData+m_nValidSize;
}

};
#endif

但是这里myarray的类型不是指针, 编译总报错, 迷迷糊糊的知道问题在哪,可是不会改,老师说用 函数重载。。。只给了这么个提示operator<<(ostream&,student*) 百度了一上午,还是不会啊,求助。。。
...全文
393 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰灰诶~ 2017-09-25
  • 打赏
  • 举报
回复
引用 2 楼 11287011 的回复:
你NEW 出来的是一个指针,add()的参数是类对向,类型不匹配。 T*m_pData; 应当是 T **m_pData;
我刚试了下 不对哇
小灰灰诶~ 2017-09-25
  • 打赏
  • 举报
回复
引用 1 楼 zh19921107 的回复:
同学,用什么编译,报什么错,你总得贴出来吧。
用的CodeBlock 16.01 GCC 编译
小灰灰诶~ 2017-09-25
  • 打赏
  • 举报
回复
ummmmm... 就是这样
||=== Build: Debug in hmfb (compiler: GNU GCC Compiler) ===|
C:\Users\DELSJ\Desktop\hmfb\arrayiterator.h||In member function 'int arrayiterator<Init>::arratiterator(Init*)':|
C:\Users\DELSJ\Desktop\hmfb\arrayiterator.h|15|warning: no return statement in function returning non-void [-Wreturn-type]|
C:\Users\DELSJ\Desktop\hmfb\main.cpp||In function 'int main()':|
C:\Users\DELSJ\Desktop\hmfb\main.cpp|12|warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]|
C:\Users\DELSJ\Desktop\hmfb\main.cpp|13|warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]|
C:\Users\DELSJ\Desktop\hmfb\main.cpp|14|warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]|
C:\Users\DELSJ\Desktop\hmfb\main.cpp|19|error: no matching function for call to 'arrayiterator<student*>::arrayiterator(student**)'|
C:\Users\DELSJ\Desktop\hmfb\main.cpp|19|note: candidates are:|
C:\Users\DELSJ\Desktop\hmfb\arrayiterator.h|8|note: arrayiterator<student*>::arrayiterator()|
C:\Users\DELSJ\Desktop\hmfb\arrayiterator.h|8|note: candidate expects 0 arguments, 1 provided|
C:\Users\DELSJ\Desktop\hmfb\arrayiterator.h|8|note: arrayiterator<student*>::arrayiterator(const arrayiterator<student*>&)|
C:\Users\DELSJ\Desktop\hmfb\arrayiterator.h|8|note: no known conversion for argument 1 from 'student**' to 'const arrayiterator<student*>&'|
C:\Users\DELSJ\Desktop\hmfb\main.cpp|20|error: no matching function for call to 'arrayiterator<student*>::arrayiterator(student**)'|
C:\Users\DELSJ\Desktop\hmfb\main.cpp|20|note: candidates are:|
C:\Users\DELSJ\Desktop\hmfb\arrayiterator.h|8|note: arrayiterator<student*>::arrayiterator()|
C:\Users\DELSJ\Desktop\hmfb\arrayiterator.h|8|note: candidate expects 0 arguments, 1 provided|
C:\Users\DELSJ\Desktop\hmfb\arrayiterator.h|8|note: arrayiterator<student*>::arrayiterator(const arrayiterator<student*>&)|
C:\Users\DELSJ\Desktop\hmfb\arrayiterator.h|8|note: no known conversion for argument 1 from 'student**' to 'const arrayiterator<student*>&'|
C:\Users\DELSJ\Desktop\hmfb\myarray.h||In instantiation of 'myarray<T>::myarray(int) [with T = student*]':|
C:\Users\DELSJ\Desktop\hmfb\main.cpp|11|required from here|
C:\Users\DELSJ\Desktop\hmfb\myarray.h|17|error: cannot convert 'student**' to 'student***' in assignment|
C:\Users\DELSJ\Desktop\hmfb\myarray.h||In instantiation of 'void myarray<T>::add(T) [with T = student*]':|
C:\Users\DELSJ\Desktop\hmfb\main.cpp|15|required from here|
C:\Users\DELSJ\Desktop\hmfb\myarray.h|25|error: cannot convert 'student*' to 'student**' in assignment|
C:\Users\DELSJ\Desktop\hmfb\myarray.h|34|error: cannot convert 'student**' to 'student*' in assignment|
C:\Users\DELSJ\Desktop\hmfb\myarray.h|38|error: cannot convert 'student**' to 'student***' in assignment|
C:\Users\DELSJ\Desktop\hmfb\myarray.h|41|error: cannot convert 'student*' to 'student**' in assignment|
C:\Users\DELSJ\Desktop\hmfb\myarray.h|44|error: cannot convert 'student*' to 'student**' in assignment|
C:\Users\DELSJ\Desktop\hmfb\myarray.h||In instantiation of 'T* myarray<T>::Begin() [with T = student*]':|
C:\Users\DELSJ\Desktop\hmfb\main.cpp|19|required from here|
C:\Users\DELSJ\Desktop\hmfb\myarray.h|66|error: cannot convert 'student***' to 'student**' in return|
C:\Users\DELSJ\Desktop\hmfb\myarray.h||In instantiation of 'T* myarray<T>::End() [with T = student*]':|
C:\Users\DELSJ\Desktop\hmfb\main.cpp|20|required from here|
C:\Users\DELSJ\Desktop\hmfb\myarray.h|70|error: cannot convert 'student***' to 'student**' in return|
||=== Build failed: 10 error(s), 12 warning(s) (0 minute(s), 0 second(s)) ===|



见识决定命运 2017-09-25
  • 打赏
  • 举报
回复
你NEW 出来的是一个指针,add()的参数是类对向,类型不匹配。 T*m_pData; 应当是 T **m_pData;
似缘非缘 2017-09-25
  • 打赏
  • 举报
回复
同学,用什么编译,报什么错,你总得贴出来吧。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧