• 4568阅读
  • 3回复

烦人的全局变量问题 [复制链接]

上一主题 下一主题
离线friday1203
 
只看楼主 倒序阅读 楼主  发表于: 2009-11-08
    有两个类:MainWindow,Widget。Mainwindow类中有一个Widget类的成员变量widget。还有一个数组v[4000],Mainwindow和Widget两个类都要访问这个数组,我就在mainwindow.h中定义了这个数组,在widget.cpp中把它声明为全局变量,出现错误,如下:
multiple definition of 'v'
collect2: ld returned 1 exit status
大体结构如下:
mainwindow.h中:
#include "widget.h"
...
private:
   Widget widget;
...
widget.h中:
#include "ui_widget.h"
#include "mainwindow.h"
extern double t[2][4000];
extern double v[2][4000];
...
        我分析了一下,在mainwindow.h中包含了widget.h(因为要声明Widget类成员变量),而widget.h有要包含mainwindow.h(因为要把v[4000]声明为全局变量),这样会出现反复包含导致上面的错误,可能是这样,不知道是不是的。
    有没有什么解决办法?还有其他方式解决吗,比如不用成员变量,友元函数,不把Widget设为Mainwindow的成员变量等等...
[ 此帖被friday1203在2009-11-08 20:03重新编辑 ]
描述:除了v其实还有t
附件: meanpulse_1.rar (948 K) 下载次数:1
离线浪漫天使
只看该作者 1楼 发表于: 2009-11-08
方便上传你的完整代码么?
离线yj_yulin

只看该作者 2楼 发表于: 2009-11-08
基础语法问题,在H文件声明变量,在CPP里面定义,同时每个H文件都要求有guard保护
xxx.h
#ifndef __xxx_h
#define __xxx_h
......
#endif
离线dbzhang800

只看该作者 3楼 发表于: 2009-11-08
楼主描述太乱了,看不太懂。

如果楼主下面这句话属实的话,这儿肯定是有问题的。
在mainwindow.h中定义了这个数组,在widget.cpp中把它声明为全局变量


mainwindow.cpp 包含 mainwindow.h, 于是 定义了数组一次!

widget.cpp 通过 widget.h 又包含 mainwindow.h 一次,于是定义数组第二次!!


原则:头文件中只放声明,不能放定义(const常量、类定义、inline函数除外)
快速回复
限100 字节
 
上一个 下一个