gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:42:48 26 4
gpt4 key购买 nike

我想在没有任何间接寻址的情况下将函数作为参数传递给模板函数。为此,我创建了两个嵌套结构,每个都定义了我希望传递给模板函数的函数。每个结构都从外部访问数据成员 B 类:

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;
};
}

我得到的编译器错误几乎都是以下格式:

error: invalid use of non-static data member B::d

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

最佳答案

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


您可以将嵌套类 Y 重组为

struct Y
{
void operator()( B& b ){
do( b );
}

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

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

请注意,您为 operator() 提供的代码没有参数列表,不会被编译,但我不会投反对票,因为您因另一个编译错误而停止(即,可能是您显示的真实代码)。

关于C++ 非静态数据成员的无效使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27101829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com