首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c中重新定义类型,但包含了保护?

在c中重新定义类型,但包含了保护?
EN

Stack Overflow用户
提问于 2015-09-12 02:02:52
回答 1查看 238关注 0票数 2

我有无法在一台计算机上编译的代码。它在我的电脑上工作,但在另一台电脑上却不起作用。这个错误是“重新定义typdef cplx”,尽管我对每个头文件都有保护,并且对typdef的每个定义都有保护:

代码语言:javascript
复制
#ifdef __cplusplus
#include <complex>
#include <cmath>
typedef std::complex<double> cplx;
#else
#include <tgmath.h>
typedef double complex cplx;
#endif

为什么会出现这样的问题?以下是两个头文件。布拉什:

代码语言:javascript
复制
#ifndef BLAS_H
#define BLAS_H
#ifdef __cplusplus
#include <complex>
#include <cmath>
typedef std::complex<double> cplx;
#else
#include <tgmath.h>
typedef double complex cplx;
#endif
//declaration of functions
#endif

和翻版。h:

代码语言:javascript
复制
#ifndef LAPACK_H
#define LAPACK_H
#ifdef __cplusplus
#include <complex>
#include <cmath>
typedef std::complex<double> cplx;
#else
#include <tgmath.h>
typedef double complex cplx;
#endif
//declarations of functions
#endif

问题是,当我将两者都包括在内时,会产生这个错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-12 02:38:03

您的警卫保护相同的包含文件被包含两次,但您有两个不同的包含文件与两个不同的警卫,你定义cplx在每一个。

您需要在每个包含文件中为该类型设置一个单独的保护程序,如下所示:

代码语言:javascript
复制
#ifndef CPLX
#define CPLX
#ifdef __cplusplus
#include <complex>
#include <cmath>
typedef std::complex<double> cplx;
#else
#include <tgmath.h>
typedef double complex cplx;
#endif
//declarations of functions
#endif
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32534424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档