Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
ner94
0 / 0 / 0
Регистрация: 21.10.2016
Сообщений: 57
1

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

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

когда в одном файле все работает
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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2016, 23:41
Ответы с готовыми решениями:

Переделать код, создав один класс, функции сделать как методы
Помогите пожалуйста создать класс! using System; using...

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

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

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

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

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

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

C#
1
            Console.WriteLine("Новая масса провода = {0}", art.GetMass());
1
FourthDimension
25 / 25 / 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
ner94
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
mishau
128 / 126 / 105
Регистрация: 17.03.2009
Сообщений: 359
24.10.2016, 01:15 5
Надо структуру решения смотреть, косяк сто пудов там.
0
Someone007
2237 / 1802 / 826
Регистрация: 09.05.2015
Сообщений: 4,449
Завершенные тесты: 1
24.10.2016, 01:17 6
Помоему единственная причина, по которой это может происходить - разные названия namespace, хотя они у вас судя по первому посту вроде как одинаковые... На всякий случай перепроверьте что файл, в котором находится класс Material подключен к проекту (еще поверьте Build Action этого файла, должно быть выставлено Compile) и названия namespace одинаковы.
0
ner94
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2016, 13:10

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

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

Сохранял один код, а открывается другой
Вчера набрал программу, сохранил ее и закрыл билдер. Сегодня открываю эту...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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