【问题标题】:How do i define variables inside of a header file? [duplicate]如何在头文件中定义变量? [复制]
【发布时间】:2020-12-08 19:32:58
【问题描述】:

如果这个问题没有意义或者看起来很简单,请原谅我,但我想了解这些头文件是如何实现的

是否可以在头文件中声明 int 等类型的变量?

我有以下代码,我声明窗口的行和窗口的尺寸存在问题。编译器说有多个定义首先在主文件中定义,我只是有#include "core.h" 并在 core.cpp 中再次定义,其中我再次有一个#include "core.h"。

    #ifndef SFMLAPP_CORE_H
    #define SFMLAPP_CORE_H
    #include "SFML/Graphics.hpp"
    #include <iostream>
    
    sf::RenderWindow* window;///Window 
    float ScreenW,ScreenH;///Dimensions of the window
    
    struct position ///used in position handiling
     {
     float x=-1;
     float y=-1;
     };
    void printText(position pos,std::string Text,float size,float outlineSize);


    #endif //SFMLAPP_CORE_H

【问题讨论】:

  • 值得了解C++ compilation process,这将回答您的问题等等。
  • 请不要用 C 标记 C++ 的东西,另请参阅这些标记的描述!作为新用户,也可以使用tour 并阅读How to Ask
  • 可以,但不推荐,除非变量是const。全局变量会让人头疼。
  • 如果你使用的是C++17,你可以声明它们inline
  • 最好不要在头文件中定义变量。每个包含头文件的源文件都将获得该变量的一个实例。尝试在不使用全局变量的情况下实现您的代码。

标签: c++


【解决方案1】:

您不能在头文件中定义变量,但是,您可以在头文件中声明它们,然后在 cpp 文件中定义它们,以便项目中的其他 cpp 文件可以访问它们。

core.h:

extern sf::RenderWindow* window;///Window 
extern float ScreenW,ScreenH;///Dimensions of the window

core.cpp

sf::RenderWindow* window;///Window 
float ScreenW,ScreenH;///Dimensions of the window

其他一切都保持不变,但现在您可以从任何包含 core.h 的文件访问 windowScreenW, ScreenH

【讨论】:

  • 可以在头文件中定义变量(因为它没有被语言明确禁止),你只是不应该这样做,因为像这样的多个定义错误的风险。否则,当场。
  • 并且在包含h文件时必须链接编译好的cpp对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
  • 2011-01-14
  • 2023-03-12
  • 2018-11-29
  • 2014-08-04
  • 2023-01-19
  • 1970-01-01
相关资源
最近更新 更多