c – 具有外部链接的命名空间

c – 具有外部链接的命名空间,第1张

概述我遇到的问题与’greentype’提到的问题基本相同 http://www.cplusplus.com/forum/beginner/12458/ 我通过名称空间共享变量,当我尝试将函数定义放入单独的文件时出现问题. 考虑以下示例,其中我想传递变量’i’,已定义 在主代码中,函数a(): * nn.h:* #ifndef _NN_H_#define _NN_H_namespace nn { 我遇到的问题与’greentype’提到的问题基本相同
http://www.cplusplus.com/forum/beginner/12458/

我通过名称空间共享变量,当我尝试将函数定义放入单独的文件时出现问题.

考虑以下示例,其中我想传递变量’i’,已定义
在主代码中,函数a():

* nn.h:*

#ifndef _NN_H_#define _NN_H_namespace nn {int i;}#endif

* main.cpp *

#include <iostream>#include "nn.h"using namespace std;using namespace nn;voID a();int main(){i=5;a();}voID a(){using namespace std;using namespace nn;i++;cout << "i = " << i << endl;}

但是现在如果我把a()的定义放到一个单独的文件中……

* a.cpp *

#include <iostream>#include "nn.h"voID a(){using namespace std;using namespace nn;i++;cout << "i = " << i << endl;}

…然后我在链接时遇到’多重定义’错误(g main.cpp
a.cpp -o main).如果我在头文件’extern’中做’i’声明(如
在其他论坛中提出),我得到’未定义引用’错误.当’i’在标题中声明为const时,我可以编译,但这不是我想要的.

任何建议都非常感谢.

解决方法 任何全局对象,如i,必须在程序中的某个地方只有一个定义,但它可以多次声明.

在没有初始化程序的情况下使用extern使声明只是一个声明.这适用于您的头文件,但您仍必须在某处定义我.除了使头部声明extern之外,您还需要向一个且仅一个源文件添加定义(即,没有extern的声明的副本).

编辑:阅读您的问题,您说您想将变量传递给函数.从样式和代码结构的角度来看,这通常不是使用共享(全局)变量的好理由.在没有任何重要原因的情况下,您通常应该定义一个函数,该函数接受一个参数并通过其参数将一个值(可能来自局部变量)从调用站点传递给该函数.

总结

以上是内存溢出为你收集整理的c – 具有外部链接的命名空间全部内容,希望文章能够帮你解决c – 具有外部链接的命名空间所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1237339.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存