遇到的错误以及一些配置、做个记录

本文详细解析了在C++中头文件(app.h)内的变量声明与定义的正确方式,避免链接期重定义错误。通过实例展示了如何在头文件中正确声明变量并在源文件(app.cpp)中定义,遵循C++编程规范。
摘要由CSDN通过智能技术生成

Vs2012 重定义的错误


2018-12-5

今天我遇到了一个链接期错误“重定义”、以前也遇到过、但是以前是“真的重定义”、有重复的变量或者是重定义的函数、但是这次不一样、听我讲清整个事件的全过程:

地点:一个头文件中、暂时命名为“app.h”,更细致一些是在一个命名空间中如下:

namespace test
{
    namespace APP
    {
        boost::shared_ptr<Test> test;
    }
}

事件:发生了重定义错误、

这个错误我找了好久、就是不知道错误到底出在哪里。于是开始上网搜索解决办法、在一个角落我看到了类似答案的回答:

“首先源码组织的就不符合规范,C++程序语言设计(C++之父写的那本)专门有一章讲如何组织源码(包括物理上的文件,和逻辑上的名字空间/类声明定义)。比如:类声明是放在.h中的,如果分离类定义则是在.cpp,如果不分离而用inline定义则也是在.h中,函数与类类似,模版都放在.h中,全局变量放在.cpp中,在.h中只放extern变量声明,#pragma once是include保护,它应该内置保护(就是放到.h文件的头部)等等。而现在你的程序出现了连接错误,一般就是因为有一个符号没有定义而你使用了,或者一个符号你定义了几次(符号是编译原理术语,类名、函数名、变量名等都是符号)”

我才意识到我以前确实没有在头文件中定义过变量;现在才知道

#ifndef APP_H
#define APP_H

int ppp = 0;        //这样都是不可以的、都会导致链接期的重定义错误
namespace test
{
    int qqq = 0;    //这个也是
}

#endif

正确的如下:

//app.h
#ifndef APP_H
#define APP_H

extern int ppp;    //对变量声明、不能再头文件中定义

#endif

//app.cpp
#include "app.h"
int ppp = 0;        //对变量定义

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值