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

Из main невидно класс. Текст всех файлов проекта внутри. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Casper-SC
 Аватар для Casper-SC
3465 / 1684 / 173
Регистрация: 27.03.2010
Сообщений: 4,824
Записей в блоге: 1
30.05.2011, 00:01     Из main невидно класс. Текст всех файлов проекта внутри. #1
Есть класс Cat. Я хочу создать его экземпляр внутри функции main, но не могу получить доступ к классу. Вообще не понимаю почему. В чём ошибка?

Проект:
Заголовочные файлы:
Cat.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#pragma once
namespace UserClasses
{
    class Cat
    {
    private:
        unsigned int age;
        unsigned int weight;
 
    public:
        Cat(void);
        ~Cat(void);
 
        unsigned int getAge();
        unsigned int getWeight();
 
        void Meow();
    };
}

stdafx.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// stdafx.h: включаемый файл для стандартных системных включаемых файлов
// или включаемых файлов для конкретного проекта, которые часто используются, но
// не часто изменяются
//
 
#pragma once
 
#include "targetver.h"
 
#include <stdio.h>
#include <tchar.h>
#include <iostream>
 
 
// TODO: Установите здесь ссылки на дополнительные заголовки, требующиеся для программы

targetver.h
C++
1
2
3
4
5
6
7
8
#pragma once
 
// Включение SDKDDKVer.h обеспечивает определение самой последней доступной платформы Windows.
 
// Если требуется выполнить построение приложения для предыдущей версии Windows, включите WinSDKVer.h и
// задайте для макроса _WIN32_WINNT значение поддерживаемой платформы перед включением SDKDDKVer.h.
 
#include <SDKDDKVer.h>



Файлы исходного кода:
Cat.cpp
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
#include "StdAfx.h"
#include "Cat.h"
 
namespace UserClasses
{
    Cat::Cat(void)
    {
    }
 
 
    Cat::~Cat(void)
    {
    }
 
    unsigned int Cat::getAge()
    {
        return Cat::age;
    }
 
    unsigned int Cat::getWeight()
    {
        return Cat::weight;
    }
}

stdafx.cpp
C++
1
2
3
4
5
6
7
// stdafx.cpp: исходный файл, содержащий только стандартные включаемые модули
// TestProjectC_plus_plus.pch будет предкомпилированным заголовком
// stdafx.obj будет содержать предварительно откомпилированные сведения о типе
 
#include "stdafx.h"
// TODO: Установите ссылки на любые требующиеся дополнительные заголовки в файле STDAFX.H
// , а не в данном файле

TestProjectC_plus_plus.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <string>
#include <sys/stat.h>
#include <sys\types.h> 
#include <fstream>
#include <stdio.h>
#include <cstring>
 
using namespace std;
using namespace UserClasses; //ТУТ ОШИБКА!!!
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    //ТУТ НЕ МОГУ СОЗДАТЬ ЭКЗЕМПЛЯР КЛАССА Cat cat = new Cat();
    system("pause");
    return 0;
}
<<< Тут точка входа в приложение
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2011, 00:01     Из main невидно класс. Текст всех файлов проекта внутри.
Посмотрите здесь:

C++ Структура, доступная из всех файлов проекта ("глобальная" структура)
Программа из 2-х файлов main.c and print.c C++
Класс строка, класс текст, агрегация C++
C++ Класс объявление с элементом типа класс Текст
класс внутри namespace C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
30.05.2011, 00:13     Из main невидно класс. Текст всех файлов проекта внутри. #2
Casper-SC, Ну так Cat.h все же надо подключить в TestProjectC_plus_plus.cpp, так:
C++
1
#include "Cat.h"
Добавлено через 3 минуты
И создавать обьект так:
C++
1
Cat obj;
Casper-SC
 Аватар для Casper-SC
3465 / 1684 / 173
Регистрация: 27.03.2010
Сообщений: 4,824
Записей в блоге: 1
30.05.2011, 00:17  [ТС]     Из main невидно класс. Текст всех файлов проекта внутри. #3
Блин, а я подключал так:
C++
1
#include <Cat.h>
и у меня ничего не работало.

Теперь используя этот же код, не могу создать экземпляр класса. Пытался как в C#:
C#
1
Cat cat = new Cat();
Не прокатило =)

Я так понимаю в C++ надо так:
C++
1
Cat cat = Cat::Cat();
Добавлено через 1 минуту
Цитата Сообщение от asics Посмотреть сообщение
Добавлено через 3 минуты
И создавать обьект так:
C++
1
Cat obj;
Значит выделяется память сразу при простом объявлении?
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
30.05.2011, 00:34     Из main невидно класс. Текст всех файлов проекта внутри. #4
Цитата Сообщение от Casper-SC Посмотреть сообщение
Значит выделяется память сразу при простом объявлении?
Ага, но можно и не сразу
C++
1
2
3
4
Cat *o;
o = new Cat();
//...
delete o;
но теперь доступ к полям класса осуществляется через оператор ->
Casper-SC
 Аватар для Casper-SC
3465 / 1684 / 173
Регистрация: 27.03.2010
Сообщений: 4,824
Записей в блоге: 1
30.05.2011, 00:57  [ТС]     Из main невидно класс. Текст всех файлов проекта внутри. #5
Цитата Сообщение от asics Посмотреть сообщение
но теперь доступ к полям класса осуществляется через оператор ->
Это вроде указатель (Я про *)?

А в моём случае обязательно удалять объект cat?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    Cat cat = Cat::Cat(3, 5);
    cout << "Возраст кошки: " << cat.getAge() << "\nВес кошки: " << cat.getWeight() << endl;
    
    Cat *cat2;
    cat2 = new Cat(7, 4);
    cout << "Возраст кошки: " << cat2->getAge() << "\nВес кошки: " << cat2->getWeight() << endl;
    delete cat2;
 
    system("pause");
    return 0;
}
Изменённый Cat.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
namespace UserClasses
{
    class Cat
    {
    private:
        unsigned int age;
        unsigned int weight;
 
    public:
        Cat(void);
        Cat(unsigned int age, unsigned int weight);
        ~Cat(void);
 
        unsigned int getAge();
        unsigned int getWeight();
 
        void Meow();
    };
}


Изменённый Cat.cpp
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
#include "StdAfx.h"
#include "Cat.h"
 
namespace UserClasses
{
    Cat::Cat(void)
    {
        Cat::age = 0;
        Cat::weight = 0;
    }
 
    Cat::Cat(unsigned int Age, unsigned int Weight)
    {
        age = Age;
        weight = Weight;
    }
 
 
    Cat::~Cat(void)
    {
    }
 
    unsigned int Cat::getAge()
    {
        return Cat::age; 
    }
 
    unsigned int Cat::getWeight()
    {
        return Cat::weight;
    }
}


Кстати есть ли какое-то различие между:
C++
1
2
3
4
    unsigned int Cat::getAge()
    {
        return Cat::age; 
    }
и
C++
1
2
3
4
    unsigned int Cat::getAge()
    {
        return age; 
    }
Оба варианта работают. Похоже это как this в C#. Конкретизирует к чему мы обращаемся в классе.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
30.05.2011, 01:02     Из main невидно класс. Текст всех файлов проекта внутри. #6
Цитата Сообщение от Casper-SC Посмотреть сообщение
Это вроде указатель?
Да.
Цитата Сообщение от Casper-SC Посмотреть сообщение
C++
1
Cat cat = Cat::Cat(3, 5);
У тебя такое скомпилировалось ?
Casper-SC
 Аватар для Casper-SC
3465 / 1684 / 173
Регистрация: 27.03.2010
Сообщений: 4,824
Записей в блоге: 1
30.05.2011, 01:03  [ТС]     Из main невидно класс. Текст всех файлов проекта внутри. #7
Цитата Сообщение от asics Посмотреть сообщение
У тебя такое скомпилировалось ?
Да =). И вывело правильно результат. И посмотри ещё раз мой прошлый пост, я его дополнил. Думал успею, но не успел.
И всё же: "А в моём случае обязательно удалять объект cat?".
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
30.05.2011, 01:08     Из main невидно класс. Текст всех файлов проекта внутри. #8
Цитата Сообщение от Casper-SC Посмотреть сообщение
Кстати есть ли какое-то различие между:
Особо не уверен, но кажется что нет, это, в принципе, одно и тоже.(Может кто-то еще дополнит)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2011, 01:20     Из main невидно класс. Текст всех файлов проекта внутри.
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Casper-SC
 Аватар для Casper-SC
3465 / 1684 / 173
Регистрация: 27.03.2010
Сообщений: 4,824
Записей в блоге: 1
30.05.2011, 01:20  [ТС]     Из main невидно класс. Текст всех файлов проекта внутри. #9
А как удалить из памяти объект cat? Не через указатель.
Yandex
Объявления
30.05.2011, 01:20     Из main невидно класс. Текст всех файлов проекта внутри.
Ответ Создать тему
Опции темы

Текущее время: 08:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru