注册 登录
编程论坛 C++教室

初学者。。。求罩。。非静态成员函数的非法调用???

gwcome 发布于 2013-03-17 11:22, 4519 次点击
程序代码:
//自己写着玩的,是关于友元函数
#include<iostream>
class Lovers
{
    friend class Others;
public:
    void kiss_action();
protected:
    void kiss();
private:
};

class Girlfriend :public Lovers
{
public:
    void kiss_action();
protected:
    void kiss();
private:
};

class Boyfriend :public Lovers
{
public:
    void kiss_action();
protected:
    void kiss();
private:
};

class Others
{
    //friend class Girlfriend;
   
//friend class Lovers;
public:
    void kiss_other();
protected:
   
private:
};

void Lovers::kiss()
{
    std::cout<<"I want kiss";
}

void Lovers::kiss_action()
{
    Lovers::kiss();
}

void Girlfriend::kiss()
{
    Lovers::kiss_action();
    std::cout<<"my girlfriend  I am a normal boy";
}

void Girlfriend::kiss_action()
{
    Girlfriend::kiss();
}

void Boyfriend::kiss()
{
    Lovers::kiss_action();
    std::cout<<"my boyfriend  I am a gayboy";
}

void Boyfriend::kiss_action()
{
    Boyfriend::kiss();
}

void Others::kiss_other()
{
    Girlfriend::kiss_action();//“Girlfriend::kiss_action”: 非静态成员函数的非法调用
    std::cout<<"I am a third..hehe";
}
int main()
{

    Lovers::kiss_action();//“Lovers::kiss_action”: 非静态成员函数的非法调用
    Girlfriend::kiss_action();//“Girlfriend::kiss_action”: 非静态成员函数的非法调用
    Boyfriend::kiss_action();//“Boyfriend::kiss_action”: 非静态成员函数的非法调用
    Others::kiss_other();
    return 0;
}
10 回复
#2
peach54602013-03-17 11:48
    Lovers::kiss_action();//“Lovers::kiss_action”: 非静态成员函数的非法调用
    Girlfriend::kiss_action();//“Girlfriend::kiss_action”: 非静态成员函数的非法调用
    Boyfriend::kiss_action();//“Boyfriend::kiss_action”: 非静态成员函数的非法调用
不知道你初学到哪一步了...
看过类这章吗?
为什么没有对象?
#3
azzbcc2013-03-17 13:38
回复 楼主 gwcome
你都没对象的,难怪要 求罩,哈哈~~~
#4
gwcome2013-03-17 14:31
回复 2楼 peach5460
=w= T.T  我有对象 而且有四个。Lovers 是Girlfriend 和Boyfriend的基类。还有个Others类
程序代码:
class Lovers
{
    friend class Others;
public:
    void kiss_action();
protected:
    void kiss();
private:
};

程序代码:

class Girlfriend :public Lovers
{
public:
    void kiss_action();
protected:
    void kiss();
private:
};

class Boyfriend :public Lovers
{
public:
    void kiss_action();
protected:
    void kiss();
private:
};

程序代码:
class Others
{
    //friend class Girlfriend;
   
//friend class Lovers;
public:
    void kiss_other();
protected:
   
private:
};
#5
gwcome2013-03-17 14:33
回复 2楼 peach5460
哦。。。我好像没有定义对象,只定义了类。。。。=W= TWT
#6
gwcome2013-03-17 15:02
回复 3楼 azzbcc
初学哈 多照顾
#7
gwcome2013-03-17 15:02
回复 2楼 peach5460
程序代码:
//自己写着玩的,是关于友元函数
#include<iostream>
class Lovers
{
   
public:
    void kiss_action();
protected:
    void kiss();
private:
   
};

class Girlfriend :public Lovers
{
friend class Others;   
public:
    void kiss_action();
protected:
    void kiss();
   
private:
   
};

class Boyfriend :public Lovers
{
public:
    void kiss_action();
protected:
    void kiss();
private:
};

class Others
{
   
public:
    void kiss_other();
protected:
   
private:
};

void Lovers::kiss()
{
    std::cout<<"I want kiss";
}

void Lovers::kiss_action()
{
    Lovers::kiss();
}

void Girlfriend::kiss()
{
    Lovers::kiss_action();
    std::cout<<"my girlfriend  I am a normal boy";
}

void Girlfriend::kiss_action()
{
    Girlfriend::kiss();
}

void Boyfriend::kiss()
{
    Lovers::kiss_action();
    std::cout<<"my boyfriend  I am a gayboy";
}

void Boyfriend::kiss_action()
{
    Boyfriend::kiss();
}

void Others::kiss_other()
{
    Girlfriend::kiss();//“Girlfriend::kiss_action”: 非静态成员函数的非法调用
    std::cout<<"I am a third..hehe";
}
int main()
{
    Lovers lovers;//定义对象 ...TAT...
    lovers.kiss_action();
    Girlfriend girlfriend;
    girlfriend.kiss_action();
    Boyfriend boyfriend;
    boyfriend.kiss_action();
    Others others;
    others.kiss_other();
    return 0;
}

我定义了对象  还是有错
#8
shmilyflf2013-03-17 15:45
你怎么这么喜欢::这个运算符,你知道这个运算符什么意思吗?
你同一个类中调用一个protected函数还要加什么“类名::”?
在子类中要重写父类的函数你怎么不用虚函数?或者直接new覆盖掉,看样你对类真是了解的不深。
个人愚见,如有不对还望见谅。
#9
gwcome2013-03-17 16:03
回复 8楼 shmilyflf
不瞒您说这是我第一个用类写的函数,不吝赐教呀。具体说说我哪里些写错了
#10
shmilyflf2013-03-17 17:13
#include<iostream>
using namespace std;//这里加这一句后面的输出前面就不用加std::了
class Lovers
{
     
 public:
     void kiss_action();
 protected:
     void kiss();//没有private的成员就别写了,虽然写了也不会有错,不是在浪费时间吗   
};
 
class Girlfriend :public Lovers
{
 friend class Others;   
 public:
     void kiss_action();
 protected:
     void kiss();     
};
 
class Boyfriend :public Lovers
{
 public:
     void kiss_action();
 protected:
     void kiss();
};
 
class Others
{
 public:
     void kiss_other();
};
 
void Lovers::kiss()
{
     cout<<"I want kiss"<<endl;
}
 
void Lovers::kiss_action()
{
     kiss();//像这种调用本类中函数的时候就不用加“类名::”了
}
 
void Girlfriend::kiss()
{
     Lovers::kiss_action();//这个加“Lovers::”是因为你要调用父类中的kiss_action()函数,
                            //而本类中还有个同名函数,如果不加的话是调用本类中的函数。
     cout<<"my girlfriend  I am a normal boy"<<endl;
}
 
void Girlfriend::kiss_action()
{
     kiss();
}
 
void Boyfriend::kiss()
{
     Lovers::kiss_action();
     cout<<"my boyfriend  I am a gayboy"<<endl;
}
 
void Boyfriend::kiss_action()
{
     kiss();
}
 
void Others::kiss_other()
 {
     Girlfriend gf;//非静态成员得用对象调用
     gf.kiss();//“Girlfriend::kiss_action”: 非静态成员函数的非法调用
     cout<<"I am a third..hehe"<<endl;
 }
 int main()
 {
     Lovers lovers;//定义对象 ...TAT...
     lovers.kiss_action();
     Girlfriend girlfriend;
     girlfriend.kiss_action();
     Boyfriend boyfriend;
     boyfriend.kiss_action();
     Others others;
     others.kiss_other();
     return 0;
 }
 //对于虚函数什么的,你看看书就会知道怎么用的。
#11
peach54602013-03-18 12:57
以下是引用gwcome在2013-3-17 15:02:54的发言:

//自己写着玩的,是关于友元函数
#include<iostream>
class Lovers
{
   
public:
    void kiss_action();
protected:
    void kiss();
private:
   
};

class Girlfriend :public Lovers
{
friend class Others;   
public:
    void kiss_action();
protected:
    void kiss();
   
private:
   
};

class Boyfriend :public Lovers
{
public:
    void kiss_action();
protected:
    void kiss();
private:
};

class Others
{
   
public:
    void kiss_other();
protected:
   
private:
};

void Lovers::kiss()
{
    std::cout<<"I want kiss";
}

void Lovers::kiss_action()
{
    Lovers::kiss();
}

void Girlfriend::kiss()
{
    Lovers::kiss_action();
    std::cout<<"my girlfriend  I am a normal boy";
}

void Girlfriend::kiss_action()
{
    Girlfriend::kiss();
}

void Boyfriend::kiss()
{
    Lovers::kiss_action();
    std::cout<<"my boyfriend  I am a gayboy";
}

void Boyfriend::kiss_action()
{
    Boyfriend::kiss();
}

void Others::kiss_other()
{
    Girlfriend::kiss();//“Girlfriend::kiss_action”: 非静态成员函数的非法调用
    std::cout<<"I am a third..hehe";
}
int main()
{
    Lovers lovers;//定义对象 ...TAT...
    lovers.kiss_action();
    Girlfriend girlfriend;
    girlfriend.kiss_action();
    Boyfriend boyfriend;
    boyfriend.kiss_action();
    Others others;
    others.kiss_other();
    return 0;
}
我定义了对象  还是有错

程序代码:

#include "stdafx.h"
//自己写着玩的,是关于友元函数
#include<iostream>
class Lovers
{

public:
    void kiss_action();
protected:
    void kiss();
private:

};

class Girlfriend :public Lovers
{
    friend class Others;   
public:
    void kiss_action();
protected:
    void kiss();

private:

};

class Boyfriend :public Lovers
{
public:
    void kiss_action();
protected:
    void kiss();
private:
};

class Others
{

public:
    void kiss_other();
protected:

private:
};

void Lovers::kiss()
{
    std::cout<<"I want kiss";
}

void Lovers::kiss_action()
{
    Lovers::kiss();
}

void Girlfriend::kiss()
{
    Lovers::kiss_action();
    std::cout<<"my girlfriend  I am a normal boy";
}

void Girlfriend::kiss_action()
{
    Girlfriend::kiss();
}

void Boyfriend::kiss()
{
    Lovers::kiss_action();
    std::cout<<"my boyfriend  I am a gayboy";
}

void Boyfriend::kiss_action()
{
    Boyfriend::kiss();
}

void Others::kiss_other()
{
    Girlfriend girl;
    girl.kiss();
    std::cout<<"I am a third..hehe";
}
int main()
{
    Lovers lovers;//定义对象 ...TAT...
    lovers.kiss_action();
    Girlfriend girlfriend;
    girlfriend.kiss_action();
    Boyfriend boyfriend;
    boyfriend.kiss_action();
    Others others;
    others.kiss_other();
    return 0;
}
1