初始化一个大小定义为extern const的数组时遇到问题.我一直遵循以下规则:全局变量应该在头文件中声明为extern,并且它们的相应定义应该在其中一个实现文件中,以避免变量重新声明错误.这种方法工作正常,直到我必须初始化一个数组,其大小被定义为extern const.我得到一个错误,预计会有一个常量表达式.但是,如果我尝试为const变量赋值,则编译器会正确地抱怨不能将值赋给常量变量.这实际上证明了编译器确实将变量视为常量.当我尝试声明一个相同大小的数组时,为什么会报告错误?
没有使用#define有什么方法可以避免这种情况吗?我也想知道这个错误的原因.
Package.h:
#ifndef PACKAGE_H
#define PACKAGE_H
extern const int SIZE;
#endif
Run Code Online (Sandbox Code Playgroud)
Package.cpp:
#include "Package.h"
const int SIZE = 10;
Run Code Online (Sandbox Code Playgroud)
Foo.cpp中:
#include "Package.h"
int main()
{
// SIZE = 5; // error - cannot assign value to a constant variable
// int Array[SIZE]; // error - constant expression expected
return 0;
}
Run Code Online (Sandbox Code Playgroud) 没有数据成员的类的大小返回为1个字节,即使声明了隐含的"this"指针.返回的大小不应该是4个字节(在32位机器上)?我遇到过一些文章,表明"this"指针不计算用于计算对象的大小.但我无法理解这个原因.此外,如果任何成员函数声明为virtual,则类的大小现在返回为4个字节.这意味着计算vptr以计算对象的大小.为什么在计算对象大小时会考虑vptr并忽略'this'指针?
我需要在VxWorks消息队列上发送一些信息.要发送的信息在运行时决定,并且可以是不同的数据类型.我正在使用这个结构 -
struct structData
{
char m_chType; // variable to indicate the data type - long, float or string
long m_lData; // variable to hold long value
float m_fData; // variable to hold float value
string m_strData; // variable to hold string value
};
Run Code Online (Sandbox Code Playgroud)
我目前正在通过消息队列发送一个structData数组.
structData arrStruct[MAX_SIZE];
Run Code Online (Sandbox Code Playgroud)
这里的问题是结构中只有一个变量一次有用,另外两个变量无用.因此,消息队列不必要地重载.我不能使用联合,因为数据类型和值是必需的.我尝试使用模板,但它没有解决问题.我一次只能发送一个数据类型的结构数组.
template <typename T>
struct structData
{
char m_chType;
T m_Data;
}
structData<int> arrStruct[MAX_SIZE];
Run Code Online (Sandbox Code Playgroud)
是否有标准的方式来保存这些信息?