Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Visual Studio 2017中,通过扩展每个参数包调用基类成员失败_C++_Visual C++_Visual Studio 2017 - Fatal编程技术网

C++ 在Visual Studio 2017中,通过扩展每个参数包调用基类成员失败

C++ 在Visual Studio 2017中,通过扩展每个参数包调用基类成员失败,c++,visual-c++,visual-studio-2017,C++,Visual C++,Visual Studio 2017,考虑以下代码: class A { public: void GoImpl() { cout << "A"; } }; class B { public: void GoImpl() { cout << "B"; } }; template <class... Mixins> class Foo : public Mixins... { public: void Go() { int temp[] = { 0

考虑以下代码:

class A
{
public:
    void GoImpl() { cout << "A"; }
};

class B
{
public:
    void GoImpl() { cout << "B"; }
};

template <class... Mixins>
class Foo : public Mixins...
{
public:
    void Go()
    {
        int temp[] = { 0, (Mixins::GoImpl(), 0)... };
    }
};

int main()
{
    Foo<A, B> foo;
    foo.Go();  // ERROR: illegal call of non-static member function

    return 0;
}
A类
{
公众:
void GoImpl(){cout作为解决方案,请尝试

    int temp[] = { 0, (this->Mixins::GoImpl(), 0)... };

inttemp[]={0,(static_cast(this)->GoImpl(),0);
作为解决方案,请尝试

    int temp[] = { 0, (this->Mixins::GoImpl(), 0)... };

inttemp[]={0,(static_cast(this)->GoImpl(),0);

是的,这很有效。知道Visual Studio为什么需要显式this指针吗?@rezbot通常,当尝试调用类型依赖于模板参数的基方法时,必须使用
this
。现在这种情况可能是个例外(我没有检查标准),但我认为这条规则是MSVC在这里感到困惑的原因。是的,这是可行的。你知道Visual Studio为什么需要显式this指针吗?@rezbot通常,当试图调用类型依赖于模板参数的基的方法时,必须使用
this
。现在这种情况可能是一个例外(我没有检查标准),但我认为这条规则是MSVC在这里感到困惑的原因。