如何定义“全局”结构?

时间:2016-12-15 15:40:09

标签: c++ struct global linkage

我想在MyTools.h

内删除此内容
#ifndef _MYTOOLS_
#define _MYTOOLS_

typedef struct {
    // const
    double LN20;
    double LN40;

    // methods
    double NoteToFrequency(int noteNumber);
} Tool;

extern const Tool tool;

#endif // !_MYTOOLS_

对于每个编译单元,只有Tool的全局/ const /唯一实例。正是我想要的。

但是现在:我该如何定义它?在.h我只宣布它。如何在.cpp中定义它?尝试过像:

tool.LN20 = 1.34;

但当然它不起作用。方法的定义是什么?

1 个答案:

答案 0 :(得分:-1)

extern没有定义它只是声明它的任何变量。您要实现的目标可以如下所示:

链接Global const object shared between compilation units解释了如何使用extern const

t.h文件

#ifndef _MYTOOLS_
#define _MYTOOLS_

struct Tool {
    // const
    double LN20;
    double LN40;
    double NoteToFrequency(int noteNumber);

} ;

extern const Tool tool ;

#endif // !_MYTOOLS_

t1.cpp

#include "t.h"
#include <stdio.h>

void use_tool()
{
    printf("%f\n",tool.LN20);
    printf("%f\n",tool.LN40);
    return;
}

t2.cpp

#include "t.h"
#include <stdio.h>


const Tool tool = {.LN20 = 20.0, .LN40 = 30.2};
double Tool::NoteToFrequency(int noteNumber)
{
    return 12.0;
}
void use1_tool()
{
    printf("%f\n",tool.LN20);
    printf("%f\n",tool.LN40);
    return;
}
int main()
{
    void use_tool();
    use_tool();
    use1_tool();
    return 0;
}

希望这有帮助。