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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Casper-SC
Эксперт .NET
3506 / 1725 / 178
Регистрация: 27.03.2010
Сообщений: 4,879
Записей в блоге: 1
#1

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

30.05.2011, 00:01. Просмотров 1179. Ответов 8
Метки нет (Все метки)

Есть класс 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;
}
<<< Тут точка входа в приложение
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2011, 00:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из main невидно класс. Текст всех файлов проекта внутри. (C++):

Изменения внутри метода класса не отображаются из main - C++
Не писал на c++ уже около года. Сейчас пришлось вернуться. И в первые минуты работы возникла проблема, которая просто в тупик ставит. ...

Невидно файлов в папке - Windows 7
В общем дело такое устанвоил Qip в програм файлс и теперь немогу видеть ввайлы котоыре мне присылают открываю папку эту через квип файлы...

Перемещение файлов внутри проекта Maven, Spring - Java EE
Добрый день. Есть проблемка, помогите, пожалуйста, решить: Создал Maven-проект в intellij idea, внутри src.main.java создаю 2 класса:...

Перенос всех вывод в консоли из Main в отдельный класс Menu - Java SE
Всем привет! Помогите, пожалуйста, в новый класс &quot;Menu&quot; добавить все выводы на консоль, убрав их из Main. Никогда так не делал, оставлял...

Заменить текст внутри тегов xml файлов - Visual Basic .NET
есть группа xml файлов. внутри тега &lt;Зачтено&gt;&lt;/Зачтено&gt; в каждом xml файле разные суммы. возможно ли как то массово заменить значение в...

Как создать класс, к которому можно обращаться со всех форм проекта? - C#
Добрый день! Подскажите, как создать класс, к которому можно обращаться со всех форм проекта Допустим забить в него массив и обращаться...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
asics
Freelance
Эксперт С++
2847 / 1784 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
30.05.2011, 00:13 #2
Casper-SC, Ну так Cat.h все же надо подключить в TestProjectC_plus_plus.cpp, так:
C++
1
#include "Cat.h"
Добавлено через 3 минуты
И создавать обьект так:
C++
1
Cat obj;
1
Casper-SC
Эксперт .NET
3506 / 1725 / 178
Регистрация: 27.03.2010
Сообщений: 4,879
Записей в блоге: 1
30.05.2011, 00:17  [ТС] #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;
Значит выделяется память сразу при простом объявлении?
0
asics
Freelance
Эксперт С++
2847 / 1784 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
30.05.2011, 00:34 #4
Цитата Сообщение от Casper-SC Посмотреть сообщение
Значит выделяется память сразу при простом объявлении?
Ага, но можно и не сразу
C++
1
2
3
4
Cat *o;
o = new Cat();
//...
delete o;
но теперь доступ к полям класса осуществляется через оператор ->
1
Casper-SC
Эксперт .NET
3506 / 1725 / 178
Регистрация: 27.03.2010
Сообщений: 4,879
Записей в блоге: 1
30.05.2011, 00:57  [ТС] #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#. Конкретизирует к чему мы обращаемся в классе.
0
asics
Freelance
Эксперт С++
2847 / 1784 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
30.05.2011, 01:02 #6
Цитата Сообщение от Casper-SC Посмотреть сообщение
Это вроде указатель?
Да.
Цитата Сообщение от Casper-SC Посмотреть сообщение
C++
1
Cat cat = Cat::Cat(3, 5);
У тебя такое скомпилировалось ?
0
Casper-SC
Эксперт .NET
3506 / 1725 / 178
Регистрация: 27.03.2010
Сообщений: 4,879
Записей в блоге: 1
30.05.2011, 01:03  [ТС] #7
Цитата Сообщение от asics Посмотреть сообщение
У тебя такое скомпилировалось ?
Да =). И вывело правильно результат. И посмотри ещё раз мой прошлый пост, я его дополнил. Думал успею, но не успел.
И всё же: "А в моём случае обязательно удалять объект cat?".
0
asics
Freelance
Эксперт С++
2847 / 1784 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
30.05.2011, 01:08 #8
Цитата Сообщение от Casper-SC Посмотреть сообщение
Кстати есть ли какое-то различие между:
Особо не уверен, но кажется что нет, это, в принципе, одно и тоже.(Может кто-то еще дополнит)
0
Casper-SC
Эксперт .NET
3506 / 1725 / 178
Регистрация: 27.03.2010
Сообщений: 4,879
Записей в блоге: 1
30.05.2011, 01:20  [ТС] #9
А как удалить из памяти объект cat? Не через указатель.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2011, 01:20
Привет! Вот еще темы с ответами:

Как правильно работать с GUI , класс main и класс окна - Java
Здравствуйте , вот только не давно начал работать с пользовательским интерфейсом. Сейчас пытаюсь сделать программу , работаю в NetBeans....

Ошибка no main class (заголовок com/javafx/main/Main) на другом компьютере - JavaFX
У меня возникла такая проблема. Если я создаю пример JavaFX приложения в Netbeans и компилирую его как устанавливаемый exe (Installing...

Не могу объявить массив внутри main - ошибка при линковке - C++
Доброго времени суток! Я начинающий в С++. Использую gcc в Ubuntu 13.04 x64 bit. Прохожу сейчас массивы. Заметил одну странность....

Структура, доступная из всех файлов проекта ("глобальная" структура) - C++
Есть четыре структуры (body, gun, enemy, st), описанные в main.cpp. К main.cpp подключен хедер save.h, в котором имеется функция void...


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

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

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