Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2011, 13:45   #1
Madmaxisss
Форумчанин
 
Регистрация: 12.07.2011
Сообщений: 158
По умолчанию определить функцию

В файле ... .h есть класс Person. В этом классе есть функция void print().
В общим вот пример:

файл h

Код:
class Person
{
private:
	int n;
	char s[100];
	bool p;
	float v;
	Person (int nn, char ss[100], bool pp, float vv);
	Person ();


public:
	void Print(int nn, char ss[100], bool pp, float vv)
	{
		cout << "Номер человека: " << nn << endl;
        cout << "ФИО: " << ss << endl;
        cout << "Пол: " << pp << endl;
        cout << "Возраст: " << vv << endl;
	}
};
Вопрос как определить функцию в файле ... сpp???

Файл cpp

Код:
#include "main.h"
#include <stdlib.h>
#include <iostream>
#include <string.h>

using namespace std;

 Person::Person(int nn, char ss[100], bool pp, float vv)
 {
	 n=nn;
	 s=ss;
	 p=pp;
	 v=vv;

	 void Person::Print(int nn, char ss[100], bool pp, float vv)
// как определить эту функцию? (компилятор пишет что Print не может //быть вызвана повторно) 
  	 {
          ......
          ......
         }
	  
	
 }

int main()
{

cin.get();
}

Последний раз редактировалось ACE Valery; 17.07.2011 в 14:30.
Madmaxisss вне форума Ответить с цитированием
Старый 16.07.2011, 14:51   #2
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Ну так ведь вы уже реализовали данную функцию в хеадер файле...и теперь снова пытаетесь ее реализовать в файле реализации...Перенесите реализацию из хеадер файла в файл реализации и будет то, что вам нужно...
Код:
// *.h
public:
void Print(int nn, char ss[100], bool pp, float vv);
Код:
// *.сpp
void Person::Print(int nn, char ss[100], bool pp, float vv)
{
cout << "Номер человека: " << nn << endl;
cout << "ФИО: " << ss << endl;
cout << "Пол: " << pp << endl;
cout << "Возраст: " << vv << endl;
}
Будь проще и люди к тебе потянутся

Последний раз редактировалось spamer; 16.07.2011 в 14:53.
spamer вне форума Ответить с цитированием
Старый 16.07.2011, 15:44   #3
Madmaxisss
Форумчанин
 
Регистрация: 12.07.2011
Сообщений: 158
По умолчанию

В файле реализации у меня объявлен конструктор инициализации, а функция определена как показано в моём примере в конструкторе инициализации. ЭТО не правильно????? Функция должна быть объявлена за конструктором?
Madmaxisss вне форума Ответить с цитированием
Старый 17.07.2011, 00:37   #4
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Madmaxisss Посмотреть сообщение
В файле реализации у меня объявлен конструктор инициализации
В C++ нет такого понятия, как "конструктор инициализации".
У вас объявлено два конструктора: по умолчания (без параметров), и конструктор с четырьмя параметрами.

Цитата:
Сообщение от Madmaxisss Посмотреть сообщение
а функция определена как показано в моём примере в конструкторе инициализации.
Функция не может быть определена в другой функции (в том числе в конструкторе).

Цитата:
Сообщение от Madmaxisss Посмотреть сообщение
Функция должна быть объявлена за конструктором?
Никакой связи между объявлением конструкторов и функций нет. Можете определять их в любой последовательности.


Ваша проблема в том, что функция Print() реализована в объявлении класса, т.е. в файле *.h, а потом вы снова пытаетесь ее реализовать в файле *.cpp, что делать, естественно, нельзя.
Исправить это можно двумя способами:
1. В объявлении класса объявить только прототип функции, без реализации
2. Оставить реализацию в объявлении класса, и больше не пытаться ее реализовать в других местах. Надо сказать, что в таком случаи функция будет inline, но вам это сейчас не важно скорее всего.
Пример, как реализовать один из вариантов, вам указали выше
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 17.07.2011, 05:53   #5
Madmaxisss
Форумчанин
 
Регистрация: 12.07.2011
Сообщений: 158
По умолчанию

Blade, Спасибо за такое подробное разъяснение. Теперь буду знать как определить функцию. И spamer-у спс за пример.
Madmaxisss вне форума Ответить с цитированием
Старый 17.07.2011, 20:40   #6
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Когда вы определяете тело функции в классе, то по умолчанию она становится встраиваемой.
Если вы хотите определить тело функции-члена класса вне класса, то надо сначала объявить эту функцию в классе, как вы это сделали с конструктором, а затем отдельно определить эту функцию вне класса в фале .cpp. Естественно в этот файл вам надо будет включить заголовочный файл, где дано объявление вашего класса.

Кроме того, даже определяя функцию вне класса вы можете сделать ее встраиваемой, добавив перед именем функции ключевое слово inline.

Кроме того, в определении функции вы можете сделать некоторые параметры, принимающие аргументы по умолчанию.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C#.Определить функцию, которая выясняет, пересекаются ли две фигуры Tomogochi Общие вопросы .NET 12 26.10.2015 00:30
Определить функцию Ksuxa Помощь студентам 6 02.09.2010 00:35
Как правильно объявить и определить функцию? -ushёl- Общие вопросы C/C++ 0 14.06.2010 13:30
определить функцию для расчета периметра треугольника Diplihe Microsoft Office Word 5 29.04.2010 05:21
Определить из наибольший общий делитель, используя функцию нахождения общего делителя. Igomax Помощь студентам 6 23.05.2009 19:41