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

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

Восстановить пароль Регистрация
 
Skrypnyk
1 / 1 / 0
Регистрация: 15.01.2013
Сообщений: 40
07.07.2013, 16:08     Заголовочный файл #1
Здравствуйте.
Помогите, пожалуйста, разобраться с заголовочными файлами и функциями-"друзьями". Например:
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++
Заголовочный файл. Хедер C++
C++ Не компилируеться заголовочный файл.
Заголовочный файл .h C++
C++ Заголовочный файл
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
07.07.2013, 17:19     Заголовочный файл #11
Цитата Сообщение от Skrypnyk Посмотреть сообщение
А почему это обязательно?
чтобы скрыть за красивыми кнопочками пост#6(правда это крайне упрощенный вариант строки для компиляции)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2013, 17:48     Заголовочный файл
Еще ссылки по теме:

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

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

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

Текущее время: 20:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru