错误C2070-未指定外部数组大小.-数组传递给MACRO
error C2070 - extern array size not specified. - array passed to MACRO
我知道编译器无法确定不完整对象的大小,因此MAKE_ARAY_RANGE失败。MAKE_ARAY_RANGE执行sizeof操作。
-
我该怎么做才能让它工作。一种方法是我在A.h中指定A_array[3]的大小。但问题是,有人可能正在修改A.cpp,而没有对A.h 中的索引进行更新
-
A_array的大小是否可以(不完全)传递给MACRO(某种程度上类似于变量参数宏),然后MAKE_ARAY_RANGE将使用该信息并维护其当前功能。我对MACRO的经验很少,在这方面帮助解决这个问题会很好。
如何将make_array.h中定义的MACRO和类修改为make_ARAY_RANGE?
A.h
----------------------
#ifndef INC_A_H
#define INC_A_H
#include "make_array.h"
extern const int A_array[];
extern const int_array_range my_array;
#endif
----------------------
A.cpp
----------------------
#include "make_array.h"
#include "A.h"
const int A_array[] = {10, 20, 30};
----------------------
B.cpp
----------------------
#include <iostream>
#include "A.h"
#include "make_array.h"
int main()
{
const int_array_range my_array = MAKE_ARRAY_RANGE(A_array);
const int *curr = my_array.first; // Accessing std::pair first
const int *last = my_array.second; // Accessing std::pair second
for(curr; curr!=last; curr++)
{
std::cout << *curr << "n";
}
int x;
std::cin >> x;
return 0;
}
----------------------
make_array.h
----------------------
#ifndef INC_MAKE_ARRAY_H
#define INC_MAKE_ARRAY_H
#include <iostream>
#include <map>
#define ARRAY_SIZE( my_array ) (sizeof(my_array)/sizeof((my_array)[0]))
template< typename Array_Entry>
class ARRAY_RANGE : public std::pair<Array_Entry*,Array_Entry*>
{
public:
ARRAY_RANGE() : std::pair<Array_Entry*,Array_Entry*>( 0, 0 ) {}
ARRAY_RANGE( Array_Entry *start, Array_Entry *end ) : std::pair<Array_Entry*,Array_Entry*>( start, end ) {}
};
template< typename Array_Entry>
ARRAY_RANGE<Array_Entry> make_array_range( Array_Entry *start, Array_Entry *end )
{
return ARRAY_RANGE<Array_Entry>( start, end );
}
#define MAKE_ARRAY_RANGE( my_array )
make_array_range( (my_array)+0, (my_array) + ARRAY_SIZE( my_array ) )
typedef ARRAY_RANGE<const int> int_array_range;
#endif
输出:
1>projectstest_externtest_externb.cpp(7): error C2070: 'const int []': illegal sizeof operand
您可以添加
extern const size_t A_array_size;
至A.h和
const size_t A_array_size = sizeof(A_array);
到A.cpp,然后在MAKE_ARRAY_RANGE
-宏中使用A_array_size
。例如:
#define ARRAY_SIZE( my_array ) (my_array ## _size) / sizeof((my_array)[0]))
虽然这解决了你上面描述的问题,但我怀疑这是否能解决你真正的问题。你不能用std::list
or std::vector
吗?
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '