gpt4 book ai didi

c++ - 在对象实例上调用静态函数时解析错误?

转载 作者:行者123 更新时间:2023-11-28 07:26:36 25 4
gpt4 key购买 nike

我想知道下面的代码是否应该被认为是有效的 c++,gcc 和 clang 都被它扼杀了,而 Microsoft 和我们项目使用的嵌入式编译器(green hills)似乎可以毫无问题地解析它。这行代码给 gcc 和 clang 带来了麻烦:

foo().Bar<int>();

gcc 似乎认为 < 是一个小于运算符,而不是指定模板参数。如果 Bar 被更改为不是模板函数,gcc 会接受它。

class Test1
{
public:
template<typename U>
static void Bar() {}
};

template<typename T>
class Test2
{
public:
Test2()
{
foo().Bar<int>();
}
Test1 foo() { return t; }
Test1 t;
};

int main()
{
Test2<int> t;
}

根据我的研究,在对象实例上调用静态成员函数是有效的 C++。那你有什么想法?这是 gcc 的错误:

Error.cpp: In constructor ‘Test2<T>::Test2()’:
Error.cpp:14:17: error: expected primary-expression before ‘int’
foo().Bar<int>();
^
Error.cpp:14:17: error: expected ‘;’ before ‘int’

最佳答案

正确的语法是:

foo().template Bar<int>();

关于c++ - 在对象实例上调用静态函数时解析错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18664484/

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