VS2008报错,“ 非静态成员函数的非法调用”

Louistao 2011-05-25 10:32:01

if ( !CCColorLayer::initWithColor( ccc4(255,255,255,255) ) ) //此处怎么报错。小弟第一次用VS2008
//以前都是用eclipse ,请问VS有没有像eclipse
//那样的智能获取的功能?就是类似于eclipse中
//alt+?的功能
{
return false;
}



class CCLayerColor{

public:
virtual bool initWithColor(ccColor4B color);
}
...全文
1020 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bill_Hoo 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 louistao 的回复:]

引用 9 楼 dizuo 的回复:

引用 8 楼 louistao 的回复:

...那我那样调用怎么没报错?

我晕,你帖子题目:VS2008报错,“ 非静态成员函数的非法调用

额。。。我是说我改过之后, CCColorLayer::initWithColor没有报错了
[/Quote]

那能不能提供下你的代码呢,以我现有的知识判断,非静态成员并不属于某个类,而是属于某个类的对象的。这种调用非静态成员的方式肯定错误丫,希望能从中学到点什么,谢谢
Louistao 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dizuo 的回复:]

引用 8 楼 louistao 的回复:

...那我那样调用怎么没报错?

我晕,你帖子题目:VS2008报错,“ 非静态成员函数的非法调用
[/Quote]
额。。。我是说我改过之后, CCColorLayer::initWithColor没有报错了
ryfdizuo 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 louistao 的回复:]

...那我那样调用怎么没报错?
[/Quote]
我晕,你帖子题目:VS2008报错,“ 非静态成员函数的非法调用
Louistao 2011-05-25
  • 打赏
  • 举报
回复
...那我那样调用怎么没报错?
Bill_Hoo 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 louistao 的回复:]

引用 5 楼 luciferisnotsatan 的回复:

引用 4 楼 louistao 的回复:

引用 1 楼 ljt3969636 的回复:

initWithColor是成员函数只能通过对象调用
确切说initWithColor是虚函数,最好通过指针或者引用调用


找到问题了,在我的头文件中没有直接继承CCLayerColor,而是继承了它的基类CCLayer
……
[/Quote]

你的这个成员函数不是声明为静态的,只有static静态成员函数才能像你这么调用
Louistao 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 luciferisnotsatan 的回复:]

引用 4 楼 louistao 的回复:

引用 1 楼 ljt3969636 的回复:

initWithColor是成员函数只能通过对象调用
确切说initWithColor是虚函数,最好通过指针或者引用调用


找到问题了,在我的头文件中没有直接继承CCLayerColor,而是继承了它的基类CCLayer

。。。。。。。。。。。。。。
接分了
[/Quote]

initWithColor是成员函数只能通过对象调用?
luciferisnotsatan 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 louistao 的回复:]

引用 1 楼 ljt3969636 的回复:

initWithColor是成员函数只能通过对象调用
确切说initWithColor是虚函数,最好通过指针或者引用调用


找到问题了,在我的头文件中没有直接继承CCLayerColor,而是继承了它的基类CCLayer
[/Quote]
。。。。。。。。。。。。。。
接分了
Louistao 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ljt3969636 的回复:]

initWithColor是成员函数只能通过对象调用
确切说initWithColor是虚函数,最好通过指针或者引用调用
[/Quote]

找到问题了,在我的头文件中没有直接继承CCLayerColor,而是继承了它的基类CCLayer
pppp23 2011-05-25
  • 打赏
  • 举报
回复
怎么才能像lz这样以c++格式贴代码而不是直接复制过来
maoxing63570 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ljt3969636 的回复:]
initWithColor是成员函数只能通过对象调用
确切说initWithColor是虚函数,最好通过指针或者引用调用
[/Quote]
++
ljt3969636 2011-05-25
  • 打赏
  • 举报
回复
initWithColor是成员函数只能通过对象调用
确切说initWithColor是虚函数,最好通过指针或者引用调用
pathuang68 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 louistao 的回复:]

引用 9 楼 dizuo 的回复:

引用 8 楼 louistao 的回复:

...那我那样调用怎么没报错?

我晕,你帖子题目:VS2008报错,“ 非静态成员函数的非法调用

额。。。我是说我改过之后, CCColorLayer::initWithColor没有报错了
[/Quote]
在某些编译器上,CCColorLayer::initWithColor其实就是CCColorLayer中成员函数initWithColor的指针,就像C语言中函数的名字就是函数的指针一样,但是另外一些编译器就不一定允许这样,所以最好还是加上取址符号,应该写成&CCColorLayer::initWithColor。

不管怎么说,那样写很容易让人误认为initWithColor是一个静态函数,因此调用普通成员函数时,还是参考1楼给出的建议。

很显然,由于initWithColor是virtual的,这说明你想用到多态性,但楼主的做法是不可能得到多态性的。这反过来又说明,将initWithColor声明成virtual是多余的了。
Louistao 2011-05-25
  • 打赏
  • 举报
回复
关键代码就在上面贴的那些了

65,186

社区成员

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

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