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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Skrypnyk
1 / 1 / 0
Регистрация: 15.01.2013
Сообщений: 40
#1

Заголовочный файл - C++

07.07.2013, 16:08. Просмотров 936. Ответов 11
Метки нет (Все метки)

Здравствуйте.
Помогите, пожалуйста, разобраться с заголовочными файлами и функциями-"друзьями". Например:
main.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
#include "A.h"
#include "myTest.cpp" // проблемное место
 
int main(){
    A myA;
    myTest(myA);
    return 0;
}

A.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
class A{
    friend void myTest(A);
    int x;
};

myTest.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
#include <iostream>
void myTest(A myA){
    myA.x = 1;
    std::cout << myA.x << std::endl;
}

Хочу, чтобы функция-"друг" была определена в отдельном файле. Как тогда написать заголовочный файл, чтобы избежать #include "myTest.cpp" ?
Заранее благодарен!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2013, 16:08     Заголовочный файл
Посмотрите здесь:

Заголовочный файл. Хедер - C++
Всем привет!) У меня есть программа. Вот она. // Списки и структуры.cpp : Defines the entry point for the console application. // ...

Не подключается заголовочный файл - C++
Вот ошибка. Место, где лежат файлы. Подключаю их.

Не видит заголовочный файл - C++
что не так с кодом ? #include &lt;gl.h&gt; #include &lt;glu.h&gt; void RenderScene(void) { glClear(GL_COLOR_BOFFER_BIT); glFlush(); } ...

Заголовочный файл и реализация - C++
Visual C++. Есть файл source.cpp: #include &lt;iostream&gt; #include &quot;kek.h&quot; using namespace std;

Заголовочный файл array - C++
Здравствуйте. Хочу определять массивы как: std::array&lt;std::array&lt;int, 10&gt;, 10&gt; arr = {}; Для этого, как я понимаю нужно подключить...

Не компилируеться заголовочный файл. - C++
Здравствуйте! Пишу свою программу на VIsual c++ в среде VS 2010. Никак не могу найти ошибку, в одном заголовочном файле: #pragma once ...

Не находит заголовочный файл - C++
Здравствуйте, использую Code::Blocks. В Location.h не могу подключить GlobalVariables.h: fatal error: GlobalValues.h: No such file...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
07.07.2013, 16:14     Заголовочный файл #2
C++
1
#include "myTest.cpp" // проблемное место
это сразу же delete и из головы тоже
Skrypnyk
1 / 1 / 0
Регистрация: 15.01.2013
Сообщений: 40
07.07.2013, 16:15  [ТС]     Заголовочный файл #3
Также интересуюсь почему строка
C++
1
friend void myTest(A);
не считается прототипом функции и не избавляет от необходимости в заголовочном файле?

Добавлено через 56 секунд
Croessmah, а можно поподробней?
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
07.07.2013, 16:28     Заголовочный файл #4
Цитата Сообщение от Skrypnyk Посмотреть сообщение
чтобы избежать #include "myTest.cpp" ?
Добавить файл
Цитата Сообщение от Skrypnyk Посмотреть сообщение
myTest.h
с необходимыми объявлениями

Добавлено через 12 минут
Цитата Сообщение от Skrypnyk Посмотреть сообщение
не считается прототипом функции и не избавляет от необходимости в заголовочном файле?
Избавляет!
Просто у Вас в MyTest.cpp нужно еще подключить хедер с классом:
C++
1
#include "A.h"
ну и в заголовках лучше бы было использовать include guargs
Skrypnyk
1 / 1 / 0
Регистрация: 15.01.2013
Сообщений: 40
07.07.2013, 16:35  [ТС]     Заголовочный файл #5
Croessmah, пробовал включить myTest.h:
C++
1
void myTest(A);
, но получаю
undefined reference to `myTest(A)'|
Добавлено через 4 минуты
Croessmah, включил определение класса в MyTest.cpp
C++
1
2
3
4
5
6
#include <iostream>
#include "A.h"
void myTest(A myA){
    myA.x = 1;
    std::cout << myA.x << std::endl;
}
Все равно
undefined reference to `myTest(A)'|
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
07.07.2013, 16:45     Заголовочный файл #6
MyTest.cpp
C++
1
2
3
4
5
6
#include <iostream>
#include "A.h"
void myTest(A myA){
    myA.x = 1;
    std::cout << myA.x << std::endl;
}

A.h
C++
1
2
3
4
5
6
7
8
9
10
#ifndef CLASS_A_H
#define CLASS_A_H
 
class A{
    friend void myTest(A);
    int x;
public:
};
 
#endif //CLASS_A_H

main.cpp
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
#include "A.h"
 
int main(){
    A myA;
    myTest(myA);
    return 0;
}

Заголовочный файл
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
07.07.2013, 16:46     Заголовочный файл #7
mytest.cpp компилируете и линкуете тоже?
Skrypnyk
1 / 1 / 0
Регистрация: 15.01.2013
Сообщений: 40
07.07.2013, 16:59  [ТС]     Заголовочный файл #8
Croessmah, очень странно. Делаю так же, как и Вы, но получаю все ту же ошибку:
undefined reference to `myTest(A)'|
Линкую? Я не знаю что это. Это нужно, если терминалом пользуешься? Я пользуюсь Code::Blocks, собираю и запускаю.
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
07.07.2013, 17:03     Заголовочный файл #9
Цитата Сообщение от Skrypnyk Посмотреть сообщение
Я пользуюсь Code::Blocks, собираю и запускаю.
mytest.cpp добавлен в проект(ветка Source,если не ошибаюсь)?
Skrypnyk
1 / 1 / 0
Регистрация: 15.01.2013
Сообщений: 40
07.07.2013, 17:15  [ТС]     Заголовочный файл #10
Ага, дело в том, что я не создавал проект, это были просто отдельные файлы. А почему это обязательно?
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
07.07.2013, 17:19     Заголовочный файл #11
Цитата Сообщение от Skrypnyk Посмотреть сообщение
А почему это обязательно?
чтобы скрыть за красивыми кнопочками пост#6(правда это крайне упрощенный вариант строки для компиляции)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2013, 17:48     Заголовочный файл
Еще ссылки по теме:

Добавить заголовочный файл - C++
Написал код и не могу понять, как добавить Header файл. #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class...

Не находит заголовочный файл - C++
Создал новый пустой проект в VS2013, в основном файле подключил #include &quot;header.h&quot;, там же в проекте создал этот заголовок и внутри описал...

Функция и заголовочный файл - C++
Здравствуйте. Не могу разобраться, как использовать функцию класса и заголовочный файл (может её вообще там не надо писать?). Не получается...

Создать заголовочный файл к коду - C++
о созданию хедер файла к следующей программе : Добавлено через 16 секунд #include &quot;mmmap.h&quot; #include &lt;iostream&gt; #include...

Вынести переменную в заголовочный файл - C++
Почему если вынести объявление глобальной переменной в заголовочный файл при компиляции возникает ошибка ... already defined in main.obj


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Skrypnyk
1 / 1 / 0
Регистрация: 15.01.2013
Сообщений: 40
07.07.2013, 17:48  [ТС]     Заголовочный файл #12
Croessmah, Спасибо за помощь.
Yandex
Объявления
07.07.2013, 17:48     Заголовочный файл
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru