小编psv*_*hav的帖子

声明一个大小声明为extern const的数组

初始化一个大小定义为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)

c++

11
推荐指数
1
解决办法
3227
查看次数

带有'this'指针的类的大小

没有数据成员的类的大小返回为1个字节,即使声明了隐含的"this"指针.返回的大小不应该是4个字节(在32位机器上)?我遇到过一些文章,表明"this"指针不计算用于计算对象的大小.但我无法理解这个原因.此外,如果任何成员函数声明为virtual,则类的大小现在返回为4个字节.这意味着计算vptr以计算对象的大小.为什么在计算对象大小时会考虑vptr并忽略'this'指针?

c++ sizeof

7
推荐指数
1
解决办法
3939
查看次数

在单个结构中处理不同的数据类型

我需要在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)

是否有标准的方式来保存这些信息?

c++

4
推荐指数
3
解决办法
2054
查看次数

标签 统计

c++ ×3

sizeof ×1