Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 21.10.2016
Сообщений: 57
1

Разбил код на классы, и один класс не находит другой

23.10.2016, 23:41. Показов 1594. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
когда в одном файле все работает
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace пример_2ого
{
 
 
    class Material
    {
        private string name;
        private double d;
 
        public Material() { }
 
        public Material(string newName, double newV)
        {
            D = newV;
            Name = newName;
        }
 
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
 
        public double D
        {
            get
            {
                return d;
            }
            set
            {
                d = value;
            }
        }
 
        public override string ToString()
        {
            return string.Format("{0};{1}", Name, D);
        }
    }
 
    class Article
    {
        private Material material;
        private double vol;
        private string name;
 
        public Article() { }
 
        public Article(string articleName, double articleVolume, Material articleMaterial)
        {
            Mat = articleMaterial;
            Name = articleName;
            Vol = articleVolume;
        }
 
        public double Vol
        {
            get
            {
                return vol;
            }
            set
            {
                vol = value;
            }
        }
 
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
 
        public Material Mat
        {
            get
            {
                return material;
            }
            set
            {
                material = value;
            }
        }
 
        public double GetMass()
        {
            return material.D * Vol;
        }
 
        public override string ToString()
        {
            return string.Format("{0};{1};{2};{3}", Name, Mat.ToString(), Vol, this.GetMass());
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Article art = new Article("Wire", 0.03, new Material("Steel", 7850));
            Console.WriteLine(art.ToString());
            Material cu = new Material("Cuprum", 8500);
            art.Mat=cu;
            //art.Mat.Name = "Cuprum";
           // art.Mat.D = 8500;// можно и так 
            Console.WriteLine(art.ToString());
            Console.ReadKey();
        }
    }
}
а когда в разных то
article
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace пример_2ого
{
    class Article
    {
        private Material material;
        private double vol;
        private string name;
 
        public Article() { }
 
        public Article(string articleName, double articleVolume, Material articleMaterial)
        {
            Mat = articleMaterial;
            Name = articleName;
            Vol = articleVolume;
        }
 
        public double Vol
        {
            get
            {
                return vol;
            }
            set
            {
                vol = value;
            }
        }
 
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
 
        public Material Mat
        {
            get
            {
                return material;
            }
            set
            {
                material = value;
            }
        }
 
        public double GetMass()
        {
            return (material.D * Vol);
        }
 
        public override string ToString()
        {
            return string.Format("{0};{1};{2};{3}", Name, Mat.ToString(), Vol, this.GetMass());
        }
    }
}
Material
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace пример_2ого
{
    class Material
    {
        private string name;
        private double d;
 
        public Material() { }
 
        public Material(string newName, double newV)
        {
            D = newV;
            Name = newName;
        }
 
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
 
        public double D
        {
            get
            {
                return d;
            }
            set
            {
                d = value;
            }
        }
 
        public override string ToString()
        {
            return string.Format("{0};{1}", Name, D);
        }
    }
}
и мэйн
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace пример_2ого
{
    class Program
    {
        static void Main(string[] args)
        {
            Article art = new Article("Wire", 0.03, new Material("Steel", 7850));
            Console.WriteLine(art.ToString());
            Material cu = new Material("Cuprum", 8500);
            art.Mat=cu;
            //art.Mat.Name = "Cuprum";
           // art.Mat.D = 8500;// можно и так 
            Console.WriteLine("Новая масса провода = ", art.GetMass());
            Console.ReadKey();
        }
    }
}
почемуто articlle не может найти Material класс когда объявляю его полем

Добавлено через 3 минуты
вот эту строку в одном варианте Material подсвечивает синим а в другом нет
private Material material;

Добавлено через 26 секунд
Цитата Сообщение от ner94 Посмотреть сообщение
private Material material;
строка
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2016, 23:41
Ответы с готовыми решениями:

Область видимости. один класс не видит другой класс
Добрый день! такая проблема. Есть базовый класс Q. От него наследуется 2 класса Р и G. Класс P...

Один класс не видит другой класс
Не компилируется код, компилятор выдает ошибку, как я понял это из-за того что я использую в первом...

Один класс не видит другой
class apple; class human { public: int age; apple green; }; class apple

Один класс не видит другой
Есть 2 класса, унаследованные от общего родителя. Один из классов-потомков не видит второй,...

6
134 / 130 / 107
Регистрация: 17.03.2009
Сообщений: 364
24.10.2016, 00:15 2
Код работает, я проверил. Вы его запускали?

Вот так 18-ю строку в Main перепишите:

C#
1
            Console.WriteLine("Новая масса провода = {0}", art.GetMass());
1
28 / 28 / 23
Регистрация: 06.10.2016
Сообщений: 74
24.10.2016, 00:26 3
Лучший ответ Сообщение было отмечено ner94 как решение

Решение

Немного изменил.
Класс Material:
Кликните здесь для просмотра всего текста
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
namespace пример_2ого
{
    class Material
    {
        private string name {get;set;}
        private double d { get; set; }
 
        public Material() { }
 
        public Material(string newName, double newV)
        {
            d = newV;
            name = newName;
        }
 
        public double D() {return d; }
        public string Name() { return name; }
 
        public override string ToString()
        {
            return string.Format("{0};{1}", name, d);
        }
    }
}


Класс Article:
Кликните здесь для просмотра всего текста
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
namespace пример_2ого
{
    class Article
    {
        private Material material;
        private double vol { get; set; }
        private string name { get; set; }
 
        public Article(string articleName, double articleVolume, Material articleMaterial)
        {
            Mat = articleMaterial;
            name = articleName;
            vol = articleVolume;
        }
 
        public double Vol()
        { return vol; }
 
        public string Name()
        {return name;}
 
        public Material Mat
        {
            get
            {
                return material;
            }
            set
            {
                material = value;
            }
        }
        public double GetMass()
        {
            return material.D() * vol;
        }
        public override string ToString()
        {
            return string.Format("{0};{1};{2};{3}", name, Mat.ToString(), vol, GetMass());
        }
 
    }
}

Program:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
 
namespace пример_2ого
{
 
 
    class Program
    {
        static void Main(string[] args)
        {
            Article art = new Article("Wire", 0.03, new Material("Steel", 7850));
            Console.WriteLine(art.ToString());
            Material cu = new Material("Cuprum", 8500);
            art.Mat = cu;
            Console.WriteLine(art.ToString());
            Console.ReadKey();
        }
    }
}

Итог:
Выводит 2 строки
1. Wire;Steel;7850;0,03;235,5
2. Wire;Cuprum;8500;0,03;255
И да, код был рабочим
1
0 / 0 / 0
Регистрация: 21.10.2016
Сообщений: 57
24.10.2016, 01:08  [ТС] 4
Ошибка 1 Не удалось найти имя типа или пространства имен "Material" (пропущена директива using или ссылка на сборку?) C:\Users\Славик\Documents\Visual Studio 2010\Projects\пример 2ого\пример 2ого\Article.cs 5 13 пример 2ого
Ошибка 2 Не удалось найти имя типа или пространства имен "Material" (пропущена директива using или ссылка на сборку?) C:\Users\Славик\Documents\Visual Studio 2010\Projects\пример 2ого\пример 2ого\Article.cs 11 62 пример 2ого
Ошибка 3 Не удалось найти имя типа или пространства имен "Material" (пропущена директива using или ссылка на сборку?) C:\Users\Славик\Documents\Visual Studio 2010\Projects\пример 2ого\пример 2ого\Article.cs 42 12 пример 2ого
0
134 / 130 / 107
Регистрация: 17.03.2009
Сообщений: 364
24.10.2016, 01:15 5
Надо структуру решения смотреть, косяк сто пудов там.
0
Эксперт .NET
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
24.10.2016, 01:17 6
Помоему единственная причина, по которой это может происходить - разные названия namespace, хотя они у вас судя по первому посту вроде как одинаковые... На всякий случай перепроверьте что файл, в котором находится класс Material подключен к проекту (еще поверьте Build Action этого файла, должно быть выставлено Compile) и названия namespace одинаковы.
0
0 / 0 / 0
Регистрация: 21.10.2016
Сообщений: 57
24.10.2016, 13:10  [ТС] 7
FourthDimension, прислали
Если Материал окажется пустым, у Вас будет ошибка. Её можно избежать, используя неявный вызов ToString()
public override string ToString()
{
return string.Format("{0};{1};{2};{3}", Name, Mat.ToString(), Vol, this.GetMass());
}

Добавлено через 8 минут
не знаю почему, но когда заново собрал еще раз в новый проект все заработало
может и правда в namespace дело
0
24.10.2016, 13:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2016, 13:10
Помогаю со студенческими работами здесь

один класс не видит другой
Есть два класса class Second; class First{ friend class Second; public: Second scnd;...

Один класс не видит другой. Преобразование класса
Всем доброго времени суток. В общем вот есть такой код: #include <cmath> using namespace std; ...

При наведении на один класс, изменить другой
Всем привет. Столкнулся с проблемой, которую не могу решить. Как при наведении на один класс,...

Как объединить два вычислительных метода используя классы в один программный код
Как объединить два вычислительных метода с помощью классов. Метод Ньютона и метод половинного...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru