Форум программистов, компьютерный форум CyberForum.ru

Как сделать чтобы функция была видна из .cpp файла? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Динамическая память и массивы http://www.cyberforum.ru/cpp-beginners/thread640393.html
Всем доброе утро . Решил по практиковаться и задался вопросом у меня есть массив a; как ему динамическую память выделить? как понял должно вот так выглядить? char** a = new char* ; вот только и не понял чем этот динамический массив вот в таком коде будет лучше чем статический char** a = new char* ; a = "2"; cout << *a;
C++ Принадлежность полигону Здравствуйте даны координаты объекта (широта и долгота) необходимо определить положение точки относительно объекта (находится внутри, находится вне объекта) как лучше мне это сделать? http://www.cyberforum.ru/cpp-beginners/thread640391.html
C++ Разименование указателя
Есть функция get_parametr,котрая в зависимости от переданного параметра,извлекает информацию,сохраняет в объекте string,адрес которого присваивается указателю на void,передаваемого по ссылке.После я передаю парметр и указатель функции,которая разыменовывает указатель и тут всплывает ошибка:необработанное исключение в .... Указатель в процессе работы программы не равен нулю,то есть указывает на...
Сохранение переменной в файл C++
Есть глобальная переменная static char Pass; Есть поток, в цикле которого эта переменная меняется раз в примерно 0.5 секунды. В мейне цикл ждёт нажатия еска для сохранения этой переменной в файл и выключения программы. Помогите с проблемой при сохранении! Если поток закомментировать а переменной что-нибудь присвоить сохраняет нормально. Если поток работает, переменная меняется, то в мейне её...
C++ Получение памяти под структуру http://www.cyberforum.ru/cpp-beginners/thread640344.html
Не могу понять, почему нельзя привести void* в мою структуру: struct func { double k,x; }; struct func* getArg(struct point &p1,struct point &p2) { struct func* functions_attr = malloc(sizeof(struct func)); functions_attr->k = (p1.y-p2.y)/(p1.x-p2.x); functions_attr->b = p1->y-k*p1->x;
C++ Трудности с организацией классовой иерархии Класс A использует данные класса B для выполнения своих методов, которые вызывает класс B. Что не хватает этому коду для того чтобы он закомпилировался? #include <iostream> class B; class A { B* v; public: подробнее

Показать сообщение отдельно
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
22.08.2012, 19:20
alkagolik, все элементарно. Есть у нас заголовочный файл с некой константой:
C++
1
2
3
// constant.h
 
const int constant = 0;
Теперь мы берем и включаем его два раза в исходный файл:
C++
1
2
3
4
5
// main.cpp
#include "constant.h"
#include "constant.h"
 
int main() { }
После препроцессирования получаем:
C++
1
2
3
4
5
6
// main.cpp
 
const int constant = 0;
const int constant = 0;
 
int main() { }
Как видим constant определена дважды, что нарушает One Definition Rule и о чем нам скажет компилятор.
Header guards решают эту проблему. Вот правильный Header guard:
C++
1
2
3
4
5
6
7
// constant.h
#ifndef CONSTANT_H
#define CONSTANT_H
 
const int constant = 0;
 
#endif
В ходе препроцессирования второго включения все расположенное между #ifndef .. #endif будет вырезано, т.к. CONSTANT_H будет определена в ходе обработки первого включения, т.е. мы получим:
C++
1
2
3
4
5
// main.cpp
 
const int constant = 0;
 
int main() { }
Как видим определение одно и все прекрасно компиляется.
Теперь твой вариант:
C++
1
2
3
4
5
6
// constant.h
#ifndef CONSTANT_H
#define CONSTANT_H
#endif
 
const int constant = 0;
Опять же препроцессор вырезает все между #ifndef .. #endif при обработке второго включения, но т.к. определение constant не находится между этим директивами оно успешно попадает в main.cpp второй вариант, тем сымым возвращая нас к исходной проблеме двух определений.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru