2017-02-18 20 views
0

Ну, я новичок в C++ из Python и не знаком с объявлением переменной в файле заголовка. Я пытаюсь создать несколько .cpp-файлов, в которых вычисляются некоторые значения из одного и того же значения констант. Мой код что-то вроде:Объявить значение в заголовке C++

/Global_input.h/ 
extern int y = 1; 
extern int x = 2; 

/Properties_1.cpp/ 
//I wanna calculate z = x + y 
include<Global_input.h> 
int z; 

/Properties_2.cpp/ 
//I wanna calculate g = x*y 
include<Global_input.h> 
int g; 

я застрял здесь, как я искать создать новый класс или другой файл .cpp. Могу ли я напрямую вызвать x, y для таких простых случаев. Заранее спасибо

ответ

1

Использование статической переменной Const для этой цели:

static const int x = 1; 

const ключевого слова здесь гарантирует, что ваш код не изменится й в любой точке (вы заявили, что его значение должно быть постоянными). Я рекомендую прочитать следующие SO нить, чтобы получить представление о том, что цель static ключевого слова:

Variable declarations in header files - static or not?

0

ваши my.h файлы должны иметь формат:

//Put before anything else 
#ifndef MY_H 
#define MY_H 

//code goes here 

//at the end of your code 
#endif 

ваш my.cpp файлы должны выглядеть следующим образом:

//include header file you wish to use 
#include "my.h" 
+0

или использовать '#pragma once' и не беспокоиться о таких вещах, как опечатки и многое другое. – xaxxon

1

В дополнение к созданию Global_input.h также создать файл Global_input.cpp следующим образом -

/Global_input.h/ 
extern int y; 
extern int x; 

/Global_input.cpp/ 
#include "Global_input.h" 

int y = 1; 
int x = 2; 

extern просто объявить переменную не определить. Вы должны определить это где-то в другом месте.

+0

'extern int y = 1;' определяет 'y', потому что он имеет инициализатор. –

+0

Я предполагаю, что это не стандартное поведение (или, по крайней мере, хорошая практика). Coz как «clang», так и «gcc» предупреждают об этом, когда заголовок включен в одну единицу перевода. И если заголовок включен в несколько единиц перевода (что здесь имеет место), он жалуется на множественные ссылки 'x' и' y'. – army007

+0

Это ** является ** стандартным поведением. Причина, по которой компиляторы жалуются на несколько определений, когда вы включаете этот заголовок в несколько единиц перевода, состоит в том, что каждая единица перевода получает определение. –

0

Вам нужно сообщить компилятору, что он должен читать только заголовок, например. например:

/* Global_input.h */ 
#ifndef GLOBAL_INPUT_H 
#define GLOBAL_INPUT_H 
    static const int y = 1; 
    static const int x = 2; 
#endif 

/* Properties_1.cpp */ 
//I wanna calculate z = x + y 
#include<Global_input.h> 
int z = x + y; 

/* Properties_2.cpp */ 
//I wanna calculate g = x*y 
#include<Global_input.h> 
int g = x * y; 
Смежные вопросы