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

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

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

Не создаётся объект класса - C++

04.11.2010, 03:12. Просмотров 412. Ответов 7
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
---------------------------------------Address.h--------------------------------------------------
#pragma once 
 
class Address
{
public:
    const static int SIZE_COUNTRY = 3;
    const static int SIZE_POSTCODE = 7;
    const static int SIZE_REGION = 11;
    const static int SIZE_LINE = SIZE_COUNTRY + SIZE_POSTCODE + SIZE_REGION;
private:
    char Country [SIZE_COUNTRY];   //ISO-код
    char Postcode [SIZE_POSTCODE]; //Почтовый индекс
    char Region [SIZE_REGION];     //Область
public:
    //Сеттеры атрибутов
    void set (const char *C, const char *P, const char *R);
    //Геттеры атрибутов
    char * getC();
    char * getP();
    char * getR();
    Address() {};
    Address(char c[], char p[], char r[]);
    Address(const Address & add);
};
 
----------------------------------------------------Address.cpp-------------------------------------
#include "stdafx.h" 
#include "Address.h"
 
//Реализация сеттеров
void Address::set (const char *C, const char *P, const char *R)
{
    strcpy_s(Country, sizeof(Country), C);
    strcpy_s(Postcode, sizeof(Postcode), P);
    strcpy_s(Region, sizeof(Region), R);
}
//Реализация геттеров
char * getC() {return Country};
char * getP() {return Postcode};
char * getR() {return Region};
 
Address::Address() {printf("Ok!");};
 
Address::Address(char c[], char p[], char r[]) 
{
    set(c, p, r);
}
 
Address::Address (const Address & add)
{
    set(add.Country, add.Postcode, add.Region);
}
 
---------------------------------------Person.h-------------------------------------------------------
#pragma once
#include "Address.h"
 
class Person
{
private:
    Address address ();
    char Firstname [20];
    char Surname [20];
    char Patrname [20];
public:
    //Функции записи (сеттеры)
    void setFirstname (const char *s);
    void setSurname (const char *s);
    void setPatrname (const char *s);
    //Функции чтения (геттеры)
    char * getFirstname ();
    char * getSurname ();
    char * getPatrname ();
    //Конструкторы: по умолчанию, с параметрами, копирующий соответственно - и деструктор
    Person ();
    Person (char Fn[], char Sn[], char Pn[]);
    Person (const Person &obj);
    ~Person();
};
 
-----------------------------------------Person.cpp--------------------------------------------------
#include "stdafx.h"
#include <conio.h>
#include <cstdio>
#include <cstring>  
#include "Person.h" 
 
//Базовый конструктор
Person::Person()
    {
        Firstname[0] = Surname [0] = Patrname [0] = 'x00';
    }
 
//Конструктор с параметрами
Person::Person(char Fn[], char Sn[], char Pn[])
    {
        setFirstname(Fn);
        setSurname(Sn);
        setPatrname(Pn);
    }
 
//Копи-конструктор
Person::Person(const Person &obj)
    {
        setFirstname(obj.Firstname);
        setSurname(obj.Surname);
        setPatrname(obj.Patrname);
    }
 
//Деструктор
Person::~Person() 
    {
        printf("\nУдаляется объект...\n");
    }
 
//Сеттеры Person
void Person::setFirstname (const char *s) {strcpy_s(Firstname, sizeof(Firstname), s);}
void Person::setSurname (const char *s) {strcpy_s(Surname, sizeof(Surname), s);}
void Person::setPatrname (const char *s) {strcpy_s(Patrname, sizeof(Patrname), s);}
//Геттеры Person
char * Person::getFirstname () {return Firstname;}
char * Person::getSurname () {return Surname;}
char * Person::getPatrname () {return Patrname;}
 
-------------------------------------------oop2-----------------------------------------------
#include "stdafx.h"
#include "Person.h"
#include "Address.h"
#include <conio.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    Address tre1();                                                     //  1
    Address tre2 ("sdf", "sdf", "fdfd");                             //  2
    getch();
    return 0;
}

1. Не создаётся объект. Но ошибки не выскакивает. Почему?
2. Ошибка:
1>oop2.obj : error LNK2019: unresolved external symbol "public: __thiscall Address::Address(char * const,char * const,char * const)" (??0Address@@QAE@QAD00@Z) referenced in function _wmain
1>D:\CPP\oop2\Debug\oop2.exe : fatal error LNK1120: 1 unresolved externals
Опять же почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2010, 03:12     Не создаётся объект класса
Посмотрите здесь:

Не создаётся объект string на ровном месте! Почему? - C++
Ребята, чё-то я не пойму: #include &lt;string&gt; #include &lt;stdio.h&gt; #include &lt;iostream&gt; using namespace std; int main () { char...

Почему два раза создаётся объект с ОДНИМ И ТЕМ ЖЕ ИМЕНЕМ? - C++
#include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; class arr{ public: arr(){ cout &lt;&lt; &quot;Вызов конструктора по...

Почему при инициализации строки, сначала создаётся пустой объект? - C++
Чтобы при создании присвоить строке какое-то значение, можно использовать два способа: string str1(”bla-bla-bla”); или string str2 =...

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

Создать объект внутри класса, который может вызывать функцию этого класса - C++
Ребята помогите уже несколько дней мучаюсь. Хочу сделать программу в консоле демонстрации работы лифта в здании 2 этажа. Сделал класс...

Индексация массива класса, через объект этого класса - C++
class A{ char c;//? - размер массива public: A(int C){c;} }; int main(){ A a(5);//вносим размер массива getch(); ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
04.11.2010, 04:04     Не создаётся объект класса #2
kowandser, Конструктор Adress ему не нравится. Хз почему
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 1
04.11.2010, 08:26     Не создаётся объект класса #3
C++
1
        Address tre2 ("sdf", "sdf", "fdfd");
Здесь вызывается конструктор с тремя строковыми литералами. Это тип const char * (то есть, содержимое этих строк вызывать нельзя). У Address такого конструктора нет, у него есть конструктор с параметрами (char [], char [], char []) - то есть, он принимает только такие строки, которые может изменять. Хотя по сути ему абсолютно ни к чему изменять передаваемые строки, надо их лишь скопировать. Решение - объявить конструктор с параметрами (const char [], const char [], const char []).
Аналогично, геттеры возвращают указатель на изменяемую строку - то есть, любой желающий сможет испохабить внутренние данные класса. Это тоже неверно, они должны возвращать const char *.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2010, 15:27     Не создаётся объект класса #4
Цитата Сообщение от kowandser Посмотреть сообщение
Address address ();
Скобки убрать.
Цитата Сообщение от kowandser Посмотреть сообщение
Address tre2 ("sdf", "sdf", "fdfd");
Здесь вы пытаетесь передать в конструктор три const char* строки. Такого конструктора у класса Address нет.

Чтобы в дальнейшем не возникало проблем почитайте про строки, указатели и константность.
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
07.11.2010, 00:21     Не создаётся объект класса #5
По идее эта штуковина не должна скомпильнуться ещё и потому, что в файле Address.cpp неизвестный идентификатор
strcpy_s

Пока не припишешь в этот файл #include <cstring>
, не компилится. У меня так, по крайней мере, MS VS 2008

Добавлено через 11 минут
...Вот ещё действительная ошибка:
Address::Address() {printf("Ok!");}; (В файле Address.cpp)

НА это ругается, что эта функция уже имеет текст реализации. И действительно:
Address() {}; (это в файле Address.h)
Crudelis
Шаровик затейник
672 / 414 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
07.11.2010, 00:24     Не создаётся объект класса #6
Address() {}; изменить нужно на Address(); либо зачем мучаться, просто в классе прописать не Address() {}; а Address() {printf("Ok!");};
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
07.11.2010, 00:28     Не создаётся объект класса #7
А вот это мне на самом деле не нравится:
C++
1
2
3
4
//Реализация геттеров
char * getC() {return Country;};
char * getP() {return Postcode;};
char * getR() {return Region;};
НАдо так:
C++
1
2
3
 char *  Address::getC() {return Country;};
char * Address::getP() {return Postcode;};
char * Address::getR() {return Region;};
Это в файле Address.cpp
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2010, 07:52     Не создаётся объект класса
Еще ссылки по теме:

Объект класса в - C++
Еще раз всем привет :) Я вроде и сам понимаю, что такое объект класса, но хотелось бы на всякий случай подтвердить свои мысли. Вот...

Глобальный объект класса - C++
Добрый вечер всем!) Вообщем суть такая: пишу статическую библиотеку, которая состоит из кучи файлов. Есть класс, конструктор которого...

cout и объект класса - C++
Здравствуйте, форумчане. Есть класс, который реализует список. Необходимо, чтобы при записи List* MyList = new List; cout &lt;&lt;...

Не записывается объект класса - C++
Задача состоит в том чтобы записать данные объекта в файл, а потом вывести их. friend ifstream&amp; operator &gt;&gt; (ifstream&amp; os,...


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

Или воспользуйтесь поиском по форуму:
kowandser
0 / 0 / 0
Регистрация: 01.10.2010
Сообщений: 50
07.11.2010, 07:52  [ТС]     Не создаётся объект класса #8
Проблема в другом была. Но уже всё ок. Всем спасибо.
Yandex
Объявления
07.11.2010, 07:52     Не создаётся объект класса
Ответ Создать тему
Опции темы

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