永发信息网

非静态成员函数非法调用如何解决

答案:2  悬赏:70  手机版
解决时间 2021-03-18 07:51
非静态成员函数非法调用如何解决
最佳答案
不太清楚你想干什么。。不过你的程序里错误很多。
error C2352: “std::vector<_Ty>::size”: 非静态成员函数的非法调用
这个错误是 i=vector::size();要改成 i=v.size();

v的初始化应该用push_back。并在while语句里提供退出条件。

if ((it+1) == v.end())
break;
这个应该放在前面判断
全部回答
代码一: [cpp] view plaincopyprint? class point{ public: void output() { } static void init() { } }; int main() { point pt; pt.init(); pt.output(); } class point{ public: void output() { } static void init() { } }; int main() { point pt; pt.init(); pt.output(); }代码二: [cpp] view plaincopyprint? class point{ public: void output() { } static void init() { } }; int main() { point::init(); point::output();//报错 } class point{ public: void output() { } static void init() { } }; int main() { point::init(); point::output();//报错 } 两个代码编译运行,代码一成功,代码二报错。错误信息: test1.cpp(16) : errorc2352: “point::output”: 非静态成员函数的非法调用。 错误信息提示:非法调用非静态成员函数point::output。但为什么init函数的调用没有错呢?该函数是一个静态函数。静态成员函数和静态成员变量属于类本身,在类加载的时候,即为他们分配了空间,所以可以通过类名::函数名或类名:变量名来访问。而非静态成员函数和非静态成员变量属于对象的方法和数据,也就是应该首先产生类的对象,然后通过类的对象去引用。 代码三: [cpp] view plaincopyprint? #include using namespace std; class point{ public: void output() { } static void init() { x = 0; y = 0; } private: int x,y; }; int main() { point::init(); //point::output();//报错 } #include using namespace std; class point{ public: void output() { } static void init() { x = 0; y = 0; } private: int x,y; }; int main() { point::init(); //point::output();//报错 }运行报错: 1>e:\学习\程序练习\test1\test1\test1.cpp(11): error c2597: 对非静态成员“point::x”的非法引用 1>e:\学习\程序练习\test1\test1\test1.cpp(12): error c2597: 对非静态成员“point::y”的非法引用 在静态成员函数中非法引用point对象的x和y数据成员。因为init是静态函数,不属于某个具体的对象,也就是说在还没有产生point类的任一个具体的对象时,该函数就已经存在于程序的代码区了。但是,point类的数据成员x和y还没有分配内存空间,这样,在init函数中对他们进行赋值操作会失败。也就是说,在静态成员函数中不能调用非静态成员,包括非静态成员函数和非静态成员变量。静态成员函数只能访问静态成员变量。 如果把上述代码中对x、y的赋值操作放在非静态函数中,就会成功。 但是,在非静态成员函数中可以调用静态成员函数。 在上述代码中,将point类的数据成员x和y的定义之前加上static限定符,使他们成为静态成员变量。 staticintx,y; 编译运行,程序报错。错误信息: 1>test1.obj: error lnk2001: 无法解析的外部符号"private:static int point::y" (?y@point@@0ha) 1>test1.obj: error lnk2001: 无法解析的外部符号"private:static int point::x" (?x@point@@0ha) 这是链接时发生的错误。出错的原因是对于静态成员变量,必须对他们进行初始化,并且应在类的定义之外进行此操作。我们在point类的定义之外,加上如下两条初始化语句: [cpp] view plaincopyprint? intpoint::x = 0; intpoint::y = 0; intpoint::x = 0; intpoint::y = 0; 则运行成功。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
中原区郑州LeRoy筋骨养护地址有谁知道?有点
天津燕宇小区是什么区的
国家公务员考试对考生身体有什么要求
侠盗飞车罪恶都市自行车怎么召唤
cf如何注销帐号
台式电脑笔记本电脑一体电脑,这三种电脑哪个
钢材开界什么意思
电视剧如意中高秋郎和丝若的结局是什么
染眉膏很湿怎么办?之前的染眉膏用完了,买了
突然发现,天津南站距离市内很远啊...没有地铁
怎样用短信取消电信彩铃
送初中女孩子生日礼物,要送什么好
孩子出生半个月了脸还是有点黄,该怎么办
民法学第二次 多选
宠物狗的饲养前景如何?
推荐资讯
安徽省庐江县周瑜墓离第四中学距离多远
哪个女装牌子里带芙字
竹子制品 加拿大海关是否有限制
舞弊审计的方式方法
如何快速画完速写
飞利浦全自动8854咖啡机一直在显示加水
晓珍制衣地址在哪,我要去那里办事
逾期报税罚款计入什么科目,重点是要填报销单
诺基亚c2,屏幕键盘怎么解锁
把冻住的东西泡在凉水里为什么比热水里化得快
已知x06-3x-1=0,求x06+x06分之一的值
五花八门私家厨房怎么去啊,有知道地址的么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?