EDIT: правильные имена функций, и добавил #pragma разИнициализация переменных в заголовке C++
Это очень сильное упрощение моей проблемы, но если я это сделать:
Ах
#pragma once
static int testNumber = 10;
void changeTestNumber();
a.cpp
#pragma once
#include "A.h"
void changeTestNumber()
{
testNumber = 15;
}
Bh
#pragma once
#include "A.h"
// some other stuff
B.cpp
#pragma once
#include "B.h"
// some other stuff
main.cpp
#pragma once
#include "B.h"
#include <iostream>
int main(){
changeTestNumber();
std::cout<<testNumber<<std::endl;
return 0;
}
Почему я не получаю testNumber = 15 при вызове из? Что происходит, когда я использую функцию, включенную в заголовок моего включенного заголовка? Если я удаляю статические in from from int testNumber, я получу некоторую ошибку в том, что мой testNumber инициализируется дважды.
Так мой заголовок скомпилирован дважды, когда я это делаю?
Заранее благодарен!
Одна функция называется «changeNumber» (ваш прототип), а другая называется «changeTestNumber» (определение) – Goodies
http://stackoverflow.com/questions/1164167/variable-declaration-in-a-header-file – kkhipis
TL; DR: Да, есть несколько переменных «testNumber», по одному для каждого заголовка. Обычно разработчики ставят статику в файл cpp и используют «#pragma once», чтобы контролировать, сколько раз заголовок определяет его значения. Более подробную информацию о многих применениях «статических» можно найти на этом сайте: http://stackoverflow.com/questions/15235526/the-static-keyword-and-its-various-uses-in-c –