gpt4 book ai didi

c++ - 私有(private)成员函数的作用范围

转载 作者:行者123 更新时间:2023-12-05 03:20:16 25 4
gpt4 key购买 nike

问题:

类声明如下:

class Select {
public:
template<typename Iterator>
static Iterator function(Iterator , Iterator , bool (*judgeFunction)(Iterator A, Iterator B) = priFunction);

private:
template<typename Iterator>
inline static bool priFunction(Iterator , Iterator);

我的测试文件如下:

template <typename T>
void showFunction(std::vector<T> &A){
Select S;
std::cout<<*S.function(A.begin(),A.end())<<std::endl;
}

CLion 为测试文件标注错误:

In template: 'priFunction' is a private member of 'Select'

我用下面这句话编译了我的CppFile:

g++ -o ExeFile CppFile.cpp -I "../../../Include/"

并且它的 ExeFile 运行成功。

我的问题

  1. 类的私有(private)或保护范围内的成员函数是否可以在类的公共(public)函数参数列表中声明为默认参数?
  2. 如果实际上没有错误,如何隐藏CLion的错误提示?(非必要)

我的 Clion 版本是 2022.1.3。

最佳答案

程序的格式是正确的,因为我们被允许使用 priFunction 作为默认参数,就像您在上面的示例中所做的那样。

这似乎是一个clang 错误Demo .正如您在上面的链接中看到的,clang 也给出了错误:

<source>:6:100: error: 'priFunction' is a private member of 'Select'
static Iterator function(Iterator , Iterator , bool (*judgeFunction)(Iterator A, Iterator B) = priFunction);
^~~~~~~~~~~
<source>:16:17: note: in instantiation of default function argument expression for 'function<__gnu_cxx::__normal_iterator<int *, std::vector<int>>>' required here
std::cout<<*S.function(A.begin(),A.end())<<std::endl;
^
<source>:21:2: note: in instantiation of function template specialization 'showFunction<int>' requested here
showFunction(v);
^
<source>:10:24: note: declared private here
inline static bool priFunction(Iterator , Iterator){return true;}

GCC 和 MSVC 正确编译程序没有任何问题。 Demo

关于c++ - 私有(private)成员函数的作用范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73218666/

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