Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

07.07.2013, 16:08. Просмотров 996. Ответов 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" ?
Заранее благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2013, 16:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заголовочный файл (C++):

Заголовочный файл. - C++
Доброго времени суток. Вопрос возник, по скольку в лекции по программированию ничего нет) я вроде как поняла что такое заголовочный...

Заголовочный файл - C++
Написал в заголовочном файле вот такой код: #ifndef SALES_DATA_H #define SALES_DATA_H #include &lt;string&gt; struct Sales_Data { ...

Заголовочный файл - C++
Исходный файл main.cpp #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;cstring&gt; #include &quot;studio.h&quot; using namespace std; ...

Заголовочный файл .h - C++
Здравствуйте уважаемые гуру-программисты! Столкнулся с такой проблемой. Пишу в С++ на линуксе в IDE geany и такая проблема, когда создаю...

Заголовочный файл - C++
Для чево етот файл используется??? Как ево использовать в своей программе помогите хочу разобраться)

Заголовочный файл - C++
Опишите подробно, пожалуйста , как создается заголовочный файл в среде 2010 . С++

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

Добавлено через 56 секунд
Croessmah, а можно поподробней?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 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
0
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)'|
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 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;
}

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

Заголовочный файл - C++
Доброго времени суток! Ситуация такая: хочу, исходя из функции, создать заголовочный файл. Но, увы, не умею создавать их. Хотелось бы...

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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