急, 关于定义二维数组常量


关于如何定义二维数组常量, 我遇到如下问题:
在a.h中
#ifndef a_h
#define a_h
...
const char* a[] =
{"sfa","ggd",};
...
#endif

在c.h中
#include "a.h"

在d.h中
#include "a.h"

链接时出现char** a重定义错误

请问, 像这种情况, 也就是说我想定义一个二维数组常量, 该怎么办?谢谢!!!

8 个解决方案

#1


如果a不是一个二维数组, 比如一个int,或int[2]都不会出现问题

#2


const变量默认限制在单个文件有效,这点不像非const对象
要想在其他文件中使用const变量,这样:

#ifndef a_h
#define a_h
...
extern const char* a[] =
{"sfa","ggd",};
...
#endif

在c.h中
#include "a.h"
extern  const char* a[];
//...
在d.h中
#include "a.h"
extern  const char* a[];
//...

#3


To jxlczjp77(): 我的目的是a.h中有个类A要使用这个二维常量数组a(或者说是一个一维字符串数组吧), 而c.h和d.h中都要用这个类A, 如果把a定义放在a.h中, 就会出现连接错误:one or more multipy symbol defined. 但是, 如果这个a是一个int型一维数组或者是简单的类型, 如int, 则不会出现这个链接错误.

#4


不要将变量定义放在头文件中,放入a.cpp文件
///////////////////////////////
//a.h
#ifndef a_h
#define a_h
...
extern const char* a[];//声明
...
#endif
////////////////////////////////////
//a.cpp
extern const char* a[] ={"sfa","ggd",};//定义

在c.h中
#include "a.h"//a.h中已经声明了a
cout<<a[0];//直接使用
//...
在d.h中
#include "a.h"
cout<<a[1];
//...

#5


但如果a不是字符串数组, 是个整型数组
const int a[] = {1, 2, 3};
或者
简单类型
const int a = 20;

为什么就好使呢?

#6


这个我也不清楚,等别人来解决,不过有一点,那就是函数和变量最好不要定义在头文件,头文件中只放声明,而定义放入cpp文件。当然inline函数除外了

#7


但如果a不是字符串数组, 是个整型数组
const int a[] = {1, 2, 3};
或者
简单类型
const int a = 20;

为什么就好使呢?


要注意,const类型变量是内连接,也就是说,在不同的文件要分别包含它才行.
所以当你定义成const int a[]时,它是一个const类型的变量,故要在各个文件中对其包含

而你原来定义的const int *a[]这是一个指向常量的指针,而a本身并非常量,所以对它来说,就不能在多个文件中重复定义,也就产生了你的错误.

可以把它改成const int* const a[],这样a就是一个常量了.可以在各个文件中重复包含

#8


谢谢各位的解答!!

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: