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

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

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

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

30.03.2014, 00:30. Просмотров 420. Ответов 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
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2014, 00:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование параметра экземпляра класса из другого cpp (C++):

Использование в качестве поля класса указатель на объект другого класса - C++
Ошибка в названии - "указателЯ" Вот, пытаюсь освоить ООП (пока только учусь): создаю класс person (человек) и car (модель машины). ...

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

Создание нового экземпляра дочернего класса из экземпляра базового - C++
Всем привет! Извиняюсь, если вопрос глупый, но что-то не смог найти конкретный ответ на него... У меня есть несколько классов: все они...

При создании экземпляра класса, создается 2 экземпляра вместо 1 - C++
Подсчет экземпляров ведется с помощью статического члена num_dogs, который во всех трех конструкторах (1. по умолчанию, 2. со всеми...

Сложение экземпляра базового класса и экземпляра наследника - C++
Добрый вечер! Моя задача - сложить экземпляр базового класса и наследника. Нужно сделать так, чтобы результат сложения "знал"...

Использование классом объектов другого класса - C++
Допустим есть два класса, назовём их First и Second, которые используют друг друга. Объявления классов в заголовочных файлах, определения...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Wlk
49 / 49 / 13
Регистрация: 07.12.2011
Сообщений: 133
30.03.2014, 00:41 #2
В key.cpp подключен заголовочный файл, с классом CHARACTER ?
C++
1
#include "Character.h"
0
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
30.03.2014, 00:43 #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();
0
Vovik_0_1
40 / 40 / 4
Регистрация: 28.07.2011
Сообщений: 431
30.03.2014, 00:44  [ТС] #4
Но как например это сделать?
0
DrOffset
7152 / 4293 / 968
Регистрация: 30.01.2014
Сообщений: 7,093
30.03.2014, 00:44 #5
Цитата Сообщение от Vovik_0_1 Посмотреть сообщение
ВОТ ТУТ *НЕ ВИДИТ КЛАСС Player
Player - это не класс, а объект класса. И чтобы он был видим в какой-то функции - нужно это обеспечить, объявления переменной в main недостаточно для этого.
0
Vovik_0_1
40 / 40 / 4
Регистрация: 28.07.2011
Сообщений: 431
30.03.2014, 00:47  [ТС] #6
Если сделаю глобально
C++
1
CHARACTER Player;
то выскакивают ошибки 1>main.obj : error LNK2005: "class CHARACTER Player" (?Player@@3VCHARACTER@@A) already defined in Key.obj
0
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
30.03.2014, 01:06 #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 - для того чтобы точно сказать какая из ошибок присутствует - нужно увидеть Ваш код полностью. Скорее всего ошибка в том где конкретно и как вы попытались
сделаю глобально
1
somebdy
7 / 7 / 1
Регистрация: 30.04.2013
Сообщений: 25
30.03.2014, 01:10 #8
Melg, ТС исходный код через #include подключает, в этом ошибка.
1
Vovik_0_1
40 / 40 / 4
Регистрация: 28.07.2011
Сообщений: 431
30.03.2014, 01:21  [ТС] #9
Всем спасибо! Разобрался!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2014, 01:21
Привет! Вот еще темы с ответами:

Классы-друзья (использование данных одного класса из другого) - C++
Зарание спс ))) Я лаймер в С++ но учусь чтоб исправиться. И куда как не к вам обращаться за помощью =) в тяжкие дни свои. Проблема с...

Удаление экземпляра класса в функции самого класса (Ошибка при отладке) - C++
Допустим, у нас есть класс Buffer, который хранит в себе указатель на класс некоторой матрицы и количество этих указателей refcounter ...

Явное создание экземпляра класса и явная специализация шаблона класса - C++
Всем добрый день! Не могу разобраться - эти две технологии дают один и тот же результат? В каких случаях применять одно и другое?...

Передача свойства одного экземпляра класса другому экземпляру класса - C++
#include <tchar.h> class A { public: A(); int aVar; }; class B : public A


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.03.2014, 01:21
Ответ Создать тему
Опции темы

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