类中使用结构体怎么解决?

aksufign 2014-09-07 06:49:54
例如:

class A
{
struct B
{
int a;
void funB()
{
//如果需要在这里访问funA()函数,如何解决?
}
};
void funA();
};

貌似这是一大类的问题,关于类和结构的交叉使用中有什么需要注意的呢?
哪里有关于这种问题详细的解答?
...全文
410 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaotao3000 2014-09-07
  • 打赏
  • 举报
回复
//像下面这样即可解决 //嵌套类内部调用外部的方法时,一般需要传入外部类实例 //像这样设计是java的风格,c++一般不这样做。 class A { struct B { int a; A* _outInstance; B(A* outInstance){_outInstance = outInstance;} void funB() { _outInstance->funA(); } }; void funA(); };
aksufign 2014-09-07
  • 打赏
  • 举报
回复
原来是这么用的。

class A{
public:
	struct B
	{
		int b = 5;
		void output(){ 
			A oa;
			cout << oa.fun(); 
		}
	};
	A(){ a = 10; }
	int fun(){ return a; }
	int a;
};

int _tmain(int argc, _TCHAR* argv[])
{
	A::B ob;
	ob.output();
	return 0;
}
从来不作 2014-09-07
  • 打赏
  • 举报
回复
引用 11 楼 Xy_betray 的回复:
好吧,我是逗比。。。在类里面没有结构的实例化。
+1
Kenney_Qin 2014-09-07
  • 打赏
  • 举报
回复
funA()是非静态的,你必须要有一个类的实例才能调用,那你干脆把funA()声明为静态的得了~
class A
{
    friend struct B;
	struct B
	{
		int a;
		void funB()
		{
			funA();
		}
	};
	static void funA();//将funA()声明为static
};
aksufign 2014-09-07
  • 打赏
  • 举报
回复
好吧,我是逗比。。。在类里面没有结构的实例化。
aksufign 2014-09-07
  • 打赏
  • 举报
回复
引用 9 楼 lovesmiles 的回复:
[quote=引用 5 楼 Xy_betray 的回复:] [quote=引用 4 楼 u011873969 的回复:] [quote=引用 3 楼 Xy_betray 的回复:] 提示错误,非静态成员函数的非法调用。。。这样普通的成员函数调用过程中前面不是要加具体对象的么?可以在这个地方调用的时候加什么呢?如果加this的话,this就是结构体指针了,又会提示this没有funA()这个成员。求大神。
你可以试试在内部的结构体里加上 friend class A; [/quote] 大神,错误信息一样, 非静态成员函数的非法调用。[/quote] 你不会这么菜吧?提示已经很明显了,函数funA不是静态函数,没有具体的对像是无法调用的。 结构体B和类A是两个不同的东西,放在类A内定义只是暴露一下声明域而已。 我只问你一个简单的问题,你在main函数里面有没有可能不定义一个A对像就直接调用funA函数? 明显做不到嘛。 只能这样 A data; data.funA() 才行。[/quote] 嗯嗯,你说的很对,具体到这个类里面应该怎么调用呢?
勤奋的小游侠 2014-09-07
  • 打赏
  • 举报
回复
引用 5 楼 Xy_betray 的回复:
[quote=引用 4 楼 u011873969 的回复:] [quote=引用 3 楼 Xy_betray 的回复:] 提示错误,非静态成员函数的非法调用。。。这样普通的成员函数调用过程中前面不是要加具体对象的么?可以在这个地方调用的时候加什么呢?如果加this的话,this就是结构体指针了,又会提示this没有funA()这个成员。求大神。
你可以试试在内部的结构体里加上 friend class A; [/quote] 大神,错误信息一样, 非静态成员函数的非法调用。[/quote] 你不会这么菜吧?提示已经很明显了,函数funA不是静态函数,没有具体的对像是无法调用的。 结构体B和类A是两个不同的东西,放在类A内定义只是暴露一下声明域而已。 我只问你一个简单的问题,你在main函数里面有没有可能不定义一个A对像就直接调用funA函数? 明显做不到嘛。 只能这样 A data; data.funA() 才行。
哈利_蜘蛛侠 2014-09-07
  • 打赏
  • 举报
回复
引用 7 楼 Xy_betray 的回复:
[quote=引用 6 楼 u011873969 的回复:] [quote=引用 5 楼 Xy_betray 的回复:] 大神,错误信息一样, 非静态成员函数的非法调用。
其实我觉得你这个类的设计不太合理。你可以换种设计方式。[/quote] 嗯嗯,我也这么觉得,是不是这样的访问根本就不允许?另外,你知道哪里有类似的问题么?就是类和结构体交叉使用的这样的问题?[/quote] 不晓得啊,你上网搜搜吧。我也是菜鸟啊,哈哈。
aksufign 2014-09-07
  • 打赏
  • 举报
回复
引用 6 楼 u011873969 的回复:
[quote=引用 5 楼 Xy_betray 的回复:] 大神,错误信息一样, 非静态成员函数的非法调用。
其实我觉得你这个类的设计不太合理。你可以换种设计方式。[/quote] 嗯嗯,我也这么觉得,是不是这样的访问根本就不允许?另外,你知道哪里有类似的问题么?就是类和结构体交叉使用的这样的问题?
哈利_蜘蛛侠 2014-09-07
  • 打赏
  • 举报
回复
引用 5 楼 Xy_betray 的回复:
大神,错误信息一样, 非静态成员函数的非法调用。
其实我觉得你这个类的设计不太合理。你可以换种设计方式。
aksufign 2014-09-07
  • 打赏
  • 举报
回复
引用 4 楼 u011873969 的回复:
[quote=引用 3 楼 Xy_betray 的回复:] 提示错误,非静态成员函数的非法调用。。。这样普通的成员函数调用过程中前面不是要加具体对象的么?可以在这个地方调用的时候加什么呢?如果加this的话,this就是结构体指针了,又会提示this没有funA()这个成员。求大神。
你可以试试在内部的结构体里加上 friend class A; [/quote] 大神,错误信息一样, 非静态成员函数的非法调用。
哈利_蜘蛛侠 2014-09-07
  • 打赏
  • 举报
回复
引用 3 楼 Xy_betray 的回复:
提示错误,非静态成员函数的非法调用。。。这样普通的成员函数调用过程中前面不是要加具体对象的么?可以在这个地方调用的时候加什么呢?如果加this的话,this就是结构体指针了,又会提示this没有funA()这个成员。求大神。
你可以试试在内部的结构体里加上 friend class A;
aksufign 2014-09-07
  • 打赏
  • 举报
回复
引用 1 楼 u011873969 的回复:
把funA();标位public就性了。
提示错误,非静态成员函数的非法调用。。。这样普通的成员函数调用过程中前面不是要加具体对象的么?可以在这个地方调用的时候加什么呢?如果加this的话,this就是结构体指针了,又会提示this没有funA()这个成员。求大神。
aksufign 2014-09-07
  • 打赏
  • 举报
回复
引用 1 楼 u011873969 的回复:
把funA();标位public就性了。

class A
{
    struct B
    {
        int a;
        void funB()
        {
            //如果需要在这里访问funA()函数,如何解决?
        }
    };
public:
    void funA();
};
你说的是这个样子么?
哈利_蜘蛛侠 2014-09-07
  • 打赏
  • 举报
回复
把funA();标位public就性了。

64,641

社区成员

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

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