Visual Studio 2010 несколько файлов cpp - PullRequest
1 голос
/ 03 ноября 2011

Я довольно новичок в Visual Studio, и в настоящее время я работаю над проектом, в котором я хочу использовать несколько файлов .cpp. По сути, я хочу создать функцию вне main.cpp в function.cpp, и эта функция должна иметь возможность изменять глобальные переменные. Тогда я бы использовал эту функцию в main.cpp.

Я попытался создать заголовок с именем globals.h и поместить в него статические переменные. Я включил globals.h в main и function.cpp, и он скомпилировался, но всякий раз, когда я вызываю эту функцию в main, она абсолютно ничего не делает. Когда я пытаюсь включить function.cpp в main.cpp, при компиляции я получаю несколько ошибок определения.

Что я делаю не так? Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 03 ноября 2011

Не используйте static переменные в заголовочных файлах. Поскольку заголовки «включены» в модули компиляции, все переменные, объявленные в заголовке static, становятся областью действия только внутри вашего модуля компиляции. Вы не сможете использовать ту же глобальную переменную в ваших файлах cpp.

Вот как должна выглядеть ваша структура:

globals.h
------
extern int my_global_integer;


main.cpp
------
#include "globals.h"

// here use my_global_integer;

function.cpp
------
#include "globals.h"

// global variables have to be declared in exactly one compilation unit.
// otherwise the linker will complain that the variable is defined twice.
int my_global_integer = 0;
0 голосов
/ 03 ноября 2011

Что вы имели в виду, пытаясь включить function.cpp в main.cpp? Вы пытаетесь использовать функции function.cpp в main.cpp? В этом случае все, что вам нужно сделать, это включить function.h в ваш файл main.cpp.

Что касается части ошибки, убедитесь, что вы предоставили прототипы и переменные данных заголовочного файла в синтаксисе #ifndef и #endif. Это должно устранить ошибку множественного определения.

Ваш function.h должен выглядеть так:

# ifndef FUNCTION_H

# определить FUNCTION_H

// здесь объявление переменных и объявление прототипа

# ENDIF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...