抛出错误的是static还是const
What is throwing the error the static or the const?
下面的代码抛出了一条错误消息,我不知道问题出在哪里——是单词static
还是const
?我做错了什么?
#include <iostream>
using namespace std;
class SampleClass
{
private:
int value;
static int counter;
public:
SampleClass(int i)
{
value = i;
counter++;
}
static int countSomeClass() const
{
return counter;
}
void showValue()
{
cout << value << endl;
}
};
int main()
{
SampleClass test(50);
test.showValue();
test.countSomeClass();
return 0;
}
错误消息:
main.cpp:16:35:错误:静态成员函数static int SampleClass::countSomeClass()不能具有cv限定符
static int countSomeClass()const
static
方法不能标记为const
:因为它在实例上不起作用,所以指定它不能修改它是没有意义的。
(您可能会争辩说,对于static
方法,它可能引用了static
方法,这些方法不能修改与类关联的static
数据;但是,这无论如何都没有用,因为您不能有const
类,也不能形成const
指针或对类的引用,因为在C++中,类不是对象)
正如错误消息所说,静态成员函数不能有cv限定符,即const
或volatile
限定符。这样的限定符被应用于非静态成员内的CCD_ 12;它们在不具有CCD_ 13的静态成员上没有意义。
您希望函数是静态的,因为它不依赖于任何实例;因此移除CCD_ 14。
static
函数不能是const
(cv限定),反之亦然。问题在于两者的组合。
根据C++规范§9.4.1/2(强调矿井)
[注:
static
成员函数没有this
指针(9.3.2)。--结束语]static
成员函数不应为virtual
。不应存在具有相同名称和参数类型(13.1)的static
和非静态成员函数。static
成员函数不应声明为const
、volatile
或const volatile
static
函数没有this
访问权限,因为它与对象的特定实例无关。没有必要应用const
,这是没有意义的-没有对象的实例可以应用const
。同样,自由函数不能是const
(或cv限定)。
如果希望函数与对象关联,请删除static
;如果希望函数为static
,请从示例中删除const
-,并删除const
。
再来一个音符;您的counter
已声明但未定义(在类之外)。它在其中一个翻译单元(cpp文件)中需要类似int SampleClass::counter = 0;
的内容。
这两者都有关系。
static
成员函数不适用于它所属类的实例- 成员函数签名末尾的
const
关键字表示该成员函数不会修改它在上调用的实例
因此,在同一个成员函数声明中同时使用这两个函数是没有意义的(因此也是无效的)。
- enum是C++中的宏变量还是整数变量
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 在命名空间中定义函数还是限定函数
- 架构决策:返回std::future还是提供回调
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 异常属于C++中的线程还是进程
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 如何在C++中确定文本文件中的元素是字符还是数字
- 返回值优化:显式移动还是隐式
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 为什么需要知道一个类是平凡的还是有平凡的构造函数
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 'string.assign(string.data(), 5)' 是明确定义的还是 UB?
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- 在这种情况下,我真的复制了字节还是复制了字符?
- 在方法/函数中使用"static const std::string"还是只使用"cons
- 抛出错误的是static还是const
- C/C++-建议使用const-static还是#define