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

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

Войти
Регистрация
Восстановить пароль
 
Vovik_0_1
40 / 40 / 4
Регистрация: 28.07.2011
Сообщений: 431
#1

Использование параметра экземпляра класса из другого cpp - C++

30.03.2014, 00:30. Просмотров 404. Ответов 8
Метки нет (Все метки)

Как использовать параметр экземпляра класса из другого cpp.
Вот у меня есть Класс
файл Character.h
C++
1
2
3
4
5
6
7
8
9
#ifndef _CHARACTER_H_
#define _CHARACTER_H_
 
class CHARACTER
{
public:
void a();
};
#endif
файл Character.cpp

C++
1
2
3
4
5
6
#include "Character.h"
 
void CHARACTER::a()
{
c = k+m;
}
Файл main.cpp
Создаю здесь экземпляр класса CHARACTER Player;
и вызываю функцию un из файла Key.cpp

C++
1
2
3
4
5
6
7
8
9
#include "Key.cpp"
#include "Character.h"
 
int main()
{
CHARACTER Player;
Player.a();
 
}
Вот теперь мне нужно из файла Key.cpp

вызвать функцию Player.a(); как это сделать?
#include "main.cpp"

C++
1
2
3
4
void an()
{
Player.a(); // ВОТ ТУТ  НЕ ВИДИТ КЛАСС Player
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2014, 00:30     Использование параметра экземпляра класса из другого cpp
Посмотрите здесь:
C++ Передача метода класса в качестве параметра для метода другого класса
C++ Создание нового экземпляра дочернего класса из экземпляра базового
C++ При создании экземпляра класса, создается 2 экземпляра вместо 1
C++ Сложение экземпляра базового класса и экземпляра наследника
Использование классом объектов другого класса C++
Классы-друзья (использование данных одного класса из другого) C++
Удаление экземпляра класса в функции самого класса (Ошибка при отладке) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wlk
49 / 49 / 13
Регистрация: 07.12.2011
Сообщений: 133
30.03.2014, 00:41     Использование параметра экземпляра класса из другого cpp #2
В key.cpp подключен заголовочный файл, с классом CHARACTER ?
C++
1
#include "Character.h"
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
30.03.2014, 00:43     Использование параметра экземпляра класса из другого cpp #3
Здравствуйте, во-первых, Вам необходимо в файле Key.cpp подключить директивой препроцессора заголовочный файл с объявлением класса CHARACTER т.е :
C++
1
#include "Character.h"
Во-вторых, необходимо помнить, что не статические методы класса, каким и является метод:
C++
1
void a();
класса CHARACTER - нельзя вызывать без объекта - экземпляра класса.

Таким образом в единицу трансляции (файл Key.cpp) каким-то образом должен быть передан либо сам экземпляр класса - Player.a(); либо он может быть создан внутри той функции, которая вызывает метод a(); (как это у вас было в main.cpp) :

C++
1
2
CHARACTER Player;
Player.a();
Vovik_0_1
40 / 40 / 4
Регистрация: 28.07.2011
Сообщений: 431
30.03.2014, 00:44  [ТС]     Использование параметра экземпляра класса из другого cpp #4
Но как например это сделать?
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
30.03.2014, 00:44     Использование параметра экземпляра класса из другого cpp #5
Цитата Сообщение от Vovik_0_1 Посмотреть сообщение
ВОТ ТУТ *НЕ ВИДИТ КЛАСС Player
Player - это не класс, а объект класса. И чтобы он был видим в какой-то функции - нужно это обеспечить, объявления переменной в main недостаточно для этого.
Vovik_0_1
40 / 40 / 4
Регистрация: 28.07.2011
Сообщений: 431
30.03.2014, 00:47  [ТС]     Использование параметра экземпляра класса из другого cpp #6
Если сделаю глобально
C++
1
CHARACTER Player;
то выскакивают ошибки 1>main.obj : error LNK2005: "class CHARACTER Player" (?Player@@3VCHARACTER@@A) already defined in Key.obj
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
30.03.2014, 01:06     Использование параметра экземпляра класса из другого cpp #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Например такой код:
C++
1
2
3
4
5
6
7
8
9
10
#include "Character.h"
 
void an() {
    CHARACTER Player; // CHARACTER - имя класса, Player - имя переменной (объекта/экземпляра класса) с типом CHARACTER
    Player.a();       // У объекта класса вызывается публичный метод
}
 
void Test(CHARACTER &player) {  // Передача в функцию изменяемого объекта класса по ссылке. 
    player.a();                 // Вызов публичного метода у объекта класса
}
Добавлено через 5 минут
error LNK2005: "class CHARACTER Player" (?Player@@3VCHARACTER@@A) already defined in Key.obj
Это ошибка линковщика ( На последнем этапе скомпилированные отдельно единицы трансляции (cpp файлы) - преобразуются в объектные файлы - которые между собой связывает линковщик) В данном случае, если я не ошибаюсь, линковщик говорит о том, что класс CHARACTER уже определен в Key.obj - для того чтобы точно сказать какая из ошибок присутствует - нужно увидеть Ваш код полностью. Скорее всего ошибка в том где конкретно и как вы попытались
сделаю глобально
somebdy
7 / 7 / 1
Регистрация: 30.04.2013
Сообщений: 25
30.03.2014, 01:10     Использование параметра экземпляра класса из другого cpp #8
Melg, ТС исходный код через #include подключает, в этом ошибка.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2014, 01:21     Использование параметра экземпляра класса из другого cpp
Еще ссылки по теме:
Передача свойства одного экземпляра класса другому экземпляру класса C++
C++ Как построить экземпляр дочернего класса на основе готового экземпляра базового класса?
C++ Вызов метода класса без создания экземпляра класса.
C++ Создать экземпляр класса по ссылке экземпляра класса
Использование своего объекта своего класса внутри другого C++

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

Или воспользуйтесь поиском по форуму:
Vovik_0_1
40 / 40 / 4
Регистрация: 28.07.2011
Сообщений: 431
30.03.2014, 01:21  [ТС]     Использование параметра экземпляра класса из другого cpp #9
Всем спасибо! Разобрался!
Yandex
Объявления
30.03.2014, 01:21     Использование параметра экземпляра класса из другого cpp
Ответ Создать тему
Опции темы

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