首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++无效使用非静态数据成员

C++无效使用非静态数据成员
EN

Stack Overflow用户
提问于 2014-11-24 09:46:31
回答 2查看 4.4K关注 0票数 1

我想把函数作为参数传递给模板化的函数,而不需要任何间接的指向。为了实现这一点,我创建了两个嵌套的结构,每个结构都定义了我希望传递给模板函数的函数。每个结构都从外部class B访问数据成员。

代码语言:javascript
复制
namespace A{
    class B{
        public:
            B();

            template <typename T>
            void templatedFunction(T t){
                //I pass one of the struct objects in to here, to invoke the desired function 
                t();
            }

        private:
            struct X{
                void operator(){
                    do();
                }

                void do(){
                    //Accesses the data members of class B
                    e->doSomething();
                }
            };

            struct Y{
                void operator(){
                    do();
                }

                void do(){
                    //Accesses the data members of class B
                    d.doSomething();
                }
            };

            C* c;
            D d;
            E* e;
    };
}

我得到的编译器错误基本上是所有的格式:

错误:无效使用非静态数据成员B::d

对于结构中访问类数据成员的行和在B中声明数据成员的行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-24 09:52:17

C++中的嵌套类(自动)不能访问包含类的实例。和其他的一样,它只是一个类的定义。您需要一个B实例来访问B的非静态数据成员。

您可以将嵌套类Y重构为

代码语言:javascript
复制
struct Y
{
    void operator()( B& b ){
        do( b );
    }

    void do( B& b ){
        //Accesses the data members of class B
        b.d.doSomething();
    }
};

并相应地修复函数模板和调用以及类X

请注意,您为operator()提供的没有参数列表的代码不会编译,但我不会否决,因为您被另一个编译错误所阻止(可能是您正在显示的真正代码)。

票数 1
EN

Stack Overflow用户

发布于 2014-11-24 09:58:45

如果您在另一个类中嵌套了一个struct (或该类),那么它不会以任何方式专门处理。它的工作原理完全相同,就像结构是在封闭类之外定义的一样。唯一不同的是嵌套类名的范围。所以,如果你有

代码语言:javascript
复制
class A { class B{}; };

代码语言:javascript
复制
class B{}; class A {};

唯一的区别是,在类A之外,您需要将类B命名为A::B (在第一个情况下),而在第二个类中命名为B。没有其他区别,尤其是B类不能获得对类A成员的任何特殊访问。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27101829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档