我可以在同一个.CPP文件中声明和定义静态类变量吗
Can I declare and define static class variable in a same .CPP file?
在.cpp中,我有一个类声明和定义。当我尝试使用建议的方法之一初始化字符串数组时,会出现错误。
class week
{
public:
week();
static const char * const days[];
}
week::week()
{
const char * const week::days = {"monday" , "tuesday" "etc..."}
}
我得到了天变量的重新定义错误,这是有效的。但我想知道为了在同一个.cpp文件中工作,我需要对上面的代码做什么更改。
这里我并没有使用头文件来声明类。类声明和定义都位于SAME.cpp文件中。
感谢
在C++文件中,您应该编写
const char * const week::days[] = {"monday", ...};
// ^^ <- don't forget these
它应该在全局范围内,而不是在构造函数中。构造函数应该与静态成员初始化无关。
您会想要做这样的事情:
class week
{
public:
week();
static const char * const days[];
};
week::week()
{
}
const char * const week::days[] = {"monday" , "tuesday", "etc..."};
void main()
{
week w;
}
更新:
看看我纠正的几个错误:
- 在类末尾添加
;
- 将静态变量
days
的初始化移到类外部,并在初始化语句中添加了一个;
静态变量在全局作用域中初始化(在类定义之后)。构造函数仅用于初始化当前对象实例的成员变量。
关于将所有代码放在同一个(.cpp)文件中的问题,答案是肯定的。您可以将所有代码放在同一个文件中并进行编译,它就会工作
但不建议这样做
按照惯例,头文件(.h)包含声明,而(.cpp)包含定义。
因此,重构上面的代码,我得到了以下带有相应代码的文件:
文件:week.h
class week
{
public:
week();
static const char * const days[];
};
文件:week.cc(或week.cpp)
#include "week.h"
const char * const week::days[] = {"monday" , "tuesday", "etc..."};
week::week()
{
}
文件:main.cc(或main.cpp)
#include "week.h"
void main()
{
week w;
}
您需要在类函数之外声明静态数据成员。
例如:
class week
{
public:
week();
static const char * const days[];
};
char * week::days[] = {"monday" , "tuesday" "etc..."};
week::week()
{
}
如果将类定义拆分为头文件(.h/.hpp)
作为一般准则,除非明确指定成员函数为内联函数,否则永远不要在头文件中定义它们(这意味着从编译器的角度来看,它们也应该是内联函数的好候选者。)
当您使函数内联时,它取决于编译器是否出于某些优化原因选择使其内联。内联声明函数有两种方法。
1) Implicit:-
Class Data
{
public:
void send()
{
}
};
2) Explicit:-
class Data
{
void send();
};
inline void Data::send()
{
}
相关文章:
- #为""定义宏;静态";针对不同的上下文
- 静态结构和一个定义规则
- 静态变量声明和定义
- 将 RTOS 队列对象封装在仅具有静态分配的 IQueue 自定义接口中
- 我可以在运行时重新定义在 OpenCascade/OCCT 标头中定义的 c++ 静态常量吗?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 如何在C++中定义静态成员结构
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 指向重载静态成员的函数指针 - 在unique_ptr中用作自定义删除器
- Qt 静态库未定义引用
- 如何将 AST 用于自定义前端操作和 clang 静态分析
- 关于静态常量数据模因的声明和定义的混淆
- 如何在定义时静态检查模板化类?
- C++对象布局是否必须静态定义?
- 何时需要定义类的静态数据成员 (un/-)
- 声明和定义函数静态会产生"undefined reference to function_name()"
- 为什么 gcc 7.3 接受静态定义中的'this'?
- SFML-对象静态定义
- 缩短静态定义
- 基于变量值C/C++静态定义数组