Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
6 / 6 / 3
Регистрация: 15.10.2011
Сообщений: 73
1

Компилятор не видит структуру внутри класса

01.07.2012, 16:36. Показов 5098. Ответов 19
Метки нет (Все метки)

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
#pragma once
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <locale>
#include <stdexcept>
class Sequences
{
public:
    struct SetsStructure
    {
        double RecurrenceEquations;
        double *ElementsOfSets;
        int NumberOfElements;
        int NumberOfSet;
    };
    double *SetsStructure;
public:
    int MethodOfDirect;
    int NumberOfSets;
    int NumberOfElements;
    int EditedSet;
    int RecurrenceRelation;
public:
    static __declspec(dllexport) bool RecursiveAdditionOfSet(int, double)
    {
        std::cin.ignore(10,'\n');
        std::cout << "1. Ввод количества элементов множества с номером" << SetsScructure.NumberOfSet-1 << std::endl;
        std::cin >> NumberOfElements;
        fflush(stdin);
        SetsStructure = new int Sequences.NumberOfElements-1;
        std::cout << "2.Ввод первого члена последовательности (x(0))" << std::endl;
        std::cin >> SetsStructure.ElementsOfSets[0];
        fflush(stdin);
        std::cout << "3.Ввод способа выражения для последующих членов последовательности" << std::endl;
        std::cin >> RecurrenceRelation;
        return 0;
    }
public:
    static __declspec(dllexport) bool InputSets(void)
    {
        int Size;
        std::cin.ignore(10,'\n');
        std::cout << "1.Ввод способа добавления данных" << std::endl;
        std::cin >> MethodOfDirect;
        fflush(stdin);
        std::cout << "2.Ввод количество задаваемых множеств" << std::endl;
        std::cin >> NumberOfSets;
        SetsStructure = new int NumberOfSets;
        for (int i = 0; i < NumberOfSets-1; i++)
        {
            SetsStructure[i].RecurrenceEquations = new double NumberOfSets;
            SetsStructure[i].ElementsOfSets = new double NumberOfSets;
        }
        fflush(stdin);
        std::cout << "3.Ввод номера редактируемого множества" << std::endl;
        std::cin >> EditedSet;
        std::cout << "4.Выберите способ задания множеств" << std::endl;
        return 0;
    }
};
В чём может быть проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2012, 16:36
Ответы с готовыми решениями:

Компилятор не видит объявление класса
//Cperson.h #pragma once #include &quot;variables.h&quot; #include &quot;Caudio.h&quot; #include &quot;Cblock.h&quot;...

Ссылка на структуру внутри класса
Программлю на с++ второй день нужно определить указатель на структуру и проинициализировать...

Функция потока не видит структуру класса
Здравствуйте! Подскажите, как это исправить: class ClassA { struct st { int a; }; ..........

Структуру переделать в класс, чтобы массив был внутри класса
есть структура struct CUSTOMER { unsigned short number; char ...

19
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
01.07.2012, 16:45 2
C++
1
2
double *SetsStructure; // это как?
SetsScructure.NumberOfSet-1 // тут опечатка в названии
0
6 / 6 / 3
Регистрация: 15.10.2011
Сообщений: 73
01.07.2012, 16:49  [ТС] 3
Цитата Сообщение от Schizorb Посмотреть сообщение
C++
1
2
double *SetsStructure; // это как?
SetsScructure.NumberOfSet-1 // тут опечатка в названии
Поправил и то и то, всё равно ругается, 42 ошибки
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
01.07.2012, 17:01 4
всегда в таких случаях есть смысл постить все ошибки сюда.
там случайно не конфликты из-за одинаковых имен структуры и переменной?
0
6 / 6 / 3
Регистрация: 15.10.2011
Сообщений: 73
01.07.2012, 18:55  [ТС] 5
Подредактировал код, теперь 12 ошибок
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
#pragma once
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <locale>
#include <stdexcept>
class Sequences
{
public:
    struct SetsStructure
    {
        static double RecurrenceEquations;
        static double *ElementsOfSets;
        static int NumberOfElements;
        static int NumberOfSet;
    };
    static int MethodOfDirect;
    static int NumberOfSets;
    static int NumberOfElements;
    static int EditedSet;
    static int RecurrenceRelation;
    static int count;
    static __declspec(dllexport) bool RecursiveAdditionOfSet(int NumberOfElements_, int count_, int RecurrenceRelation_, double _SetsStructure)
    {
        std::cin.ignore(10,'\n');
        std::cout << "1. Ввод количества элементов множества с номером" << SetsStructure.NumberOfSet-1 << std::endl;
        std::cin >> Sequences.NumberOfElements;
        fflush(stdin);
        Sequences.SetsStructure = new int Sequences.NumberOfElements-1;
        for (count = 0; count < NumberOfSets-1; count++)
        {
            Sequences.SetsStructure.RecurrenceEquations = new double Sequences.NumberOfSets-1;
            Sequences.SetsStructure.ElementsOfSets = new double Sequences.NumberOfSets-1;
        }
        std::cout << "2.Ввод первого члена последовательности (x(0))" << std::endl;
        std::cin >> SetsStructure.ElementsOfSets[0];
        fflush(stdin);
        std::cout << "3.Ввод способа выражения для последующих членов последовательности" << std::endl;
        std::cin >> RecurrenceRelation;
        return 0;
    }
    static __declspec(dllexport) bool InputSets(void)
    {
        static int Size;
        std::cin.ignore(10,'\n');
        std::cout << "1.Ввод способа добавления данных" << std::endl;
        std::cin >> MethodOfDirect;
        fflush(stdin);
        std::cout << "2.Ввод количество задаваемых множеств" << std::endl;
        std::cin >> NumberOfSets;
        fflush(stdin);
        std::cout << "3.Ввод номера редактируемого множества" << std::endl;
        std::cin >> EditedSet;
        std::cout << "4.Выберите способ задания множеств" << std::endl;
        return 0;
    }
};
Ошибки:
Ошибка 3 error C2143: синтаксическая ошибка: отсутствие ";" перед "." c:\%...%\sequences\sequences\Sequences.h 29 Sequences
Ошибка 4 error C2143: синтаксическая ошибка: отсутствие ";" перед "." c:\%...%\sequences\sequences\Sequences.h 29 Sequences
Ошибка 5 error C2143: синтаксическая ошибка: отсутствие ";" перед "." c:\%...%\sequences\sequences\Sequences.h 32 Sequences
Ошибка 6 error C2143: синтаксическая ошибка: отсутствие ";" перед "." c:\%...%\sequences\sequences\Sequences.h 32 Sequences
Ошибка 7 error C2143: синтаксическая ошибка: отсутствие ";" перед "." c:\%...%\sequences\sequences\Sequences.h 33 Sequences
Ошибка 8 error C2143: синтаксическая ошибка: отсутствие ";" перед "." c:\%...%\sequences\sequences\Sequences.h 33 Sequences
Ошибка 12 error C2143: синтаксическая ошибка: отсутствие ";" перед "." c:\%...%\sequences\sequences\Sequences.h 29 Sequences
Ошибка 13 error C2143: синтаксическая ошибка: отсутствие ";" перед "." c:\%...%\sequences\sequences\Sequences.h 29 Sequences
Ошибка 14 error C2143: синтаксическая ошибка: отсутствие ";" перед "." c:\%...%\sequences\sequences\Sequences.h 32 Sequences
Ошибка 15 error C2143: синтаксическая ошибка: отсутствие ";" перед "." c:\%...%\sequences\sequences\Sequences.h 32 Sequences
Ошибка 16 error C2143: синтаксическая ошибка: отсутствие ";" перед "." c:\%...%\sequences\sequences\Sequences.h 33 Sequences
Ошибка 17 error C2143: синтаксическая ошибка: отсутствие ";" перед "." c:\%...%\sequences\sequences\Sequences.h 33 Sequences
0
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
01.07.2012, 19:06 6
Если нужен доступ к статическому члену, при отсутствии объекта, то можно использовать такой синтаксис:
C++
1
std::cout << "1. Ввод количества элементов множества с номером" << SetsStructure::NumberOfSet-1 << std::endl;
А вот это как? SetsStructure - название типа, вы ему присваиваете указатель на int.
C++
1
Sequences.SetsStructure = new int Sequences.NumberOfElements-1;
Или я чего не понимаю, или код мутный...
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
01.07.2012, 19:10 7
Glam_Man, скажи, а зачем ты все переменные объявил как static ? В этом есть необходимость?
0
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
01.07.2012, 19:13 8
Schizorb, очень мутный )
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
01.07.2012, 21:21 9
наверно потому, что статические функции класса экпортятся из дллки. абра кадабра получилась в общем. Не знаю можно ли и как экпортить классы. Но вот такой подход должен работать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// h file
struct SomeStruct
{
   int x;
   int y;
   int z;
};
 
__declspec(dllexport) bool SomeFunction(SomeStruct* someStruct, int arg1, int arg2);
 
 
// cpp file
__declspec(dllexport) bool SomeFunction(SomeStruct* someStruct, int arg1, int arg2)
{
  // тут что-то делаем.
   return true;
}
Такая вот эмуляция с++ классов. Только в случае классов при вызове метода в него неявно передается указатель на объект, а в этом случае все это делается явно.
Сперва создается структура, в которой только данные, потом эта структура передается по указателю или ссылке в такие вот "методы". Они так же могут быть оформлены в виде статических функций класса, но наверно в этом нет особой необходимости. При таком подходе нет нужды в статических переменных, которые сейчас в коде как одна большая глобальная переменная.


Еще вариант - сделать класс как класс, чтобы он ничего про дллки не знал. и заэксекпортить пару функций для динамического создания и удаления объектов этого класса.
При определенной конфигурации сборки екзешника и дллки, удалять такие объекты можно будет и в екзешнике.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
01.07.2012, 23:40 10
Цитата Сообщение от DU Посмотреть сообщение
наверно потому, что статические функции класса экпортятся из дллки.
Ты на мой вопрос отвечал?
0
6 / 6 / 3
Регистрация: 15.10.2011
Сообщений: 73
02.07.2012, 10:48  [ТС] 11
Цитата Сообщение от lazybiz Посмотреть сообщение
Glam_Man, скажи, а зачем ты все переменные объявил как static ? В этом есть необходимость?
Наверное нет, но если не объявлять как static, то компилятор начинает ругаться
Цитата Сообщение от DU Посмотреть сообщение
наверно потому, что статические функции класса экпортятся из дллки. абра кадабра получилась в общем. Не знаю можно ли и как экпортить классы. Но вот такой подход должен работать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// h file
struct SomeStruct
{
   int x;
   int y;
   int z;
};
 
__declspec(dllexport) bool SomeFunction(SomeStruct* someStruct, int arg1, int arg2);
 
 
// cpp file
__declspec(dllexport) bool SomeFunction(SomeStruct* someStruct, int arg1, int arg2)
{
  // тут что-то делаем.
   return true;
}
Такая вот эмуляция с++ классов. Только в случае классов при вызове метода в него неявно передается указатель на объект, а в этом случае все это делается явно.
Сперва создается структура, в которой только данные, потом эта структура передается по указателю или ссылке в такие вот "методы". Они так же могут быть оформлены в виде статических функций класса, но наверно в этом нет особой необходимости. При таком подходе нет нужды в статических переменных, которые сейчас в коде как одна большая глобальная переменная.


Еще вариант - сделать класс как класс, чтобы он ничего про дллки не знал. и заэксекпортить пару функций для динамического создания и удаления объектов этого класса.
При определенной конфигурации сборки екзешника и дллки, удалять такие объекты можно будет и в екзешнике.
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
//Sequences.cpp
#include "stdafx.h"
#include "Sequences.h"
__declspec(dllexport) bool InputSets(Sequences::SetsStructure* setsStructure)
{
    int Size;
    std::cin.ignore(10,'\n');
    std::cout << "1.Ввод способа добавления данных" << std::endl;
    std::cin >> Sequences::SetsStructure::MethodOfDirect;
    fflush(stdin);
    std::cout << "2.Ввод количество задаваемых множеств" << std::endl;
    std::cin >> Sequences::SetsStructure::NumberOfSets[0];
    fflush(stdin);
    std::cout << "3.Ввод номера редактируемого множества" << std::endl;
    std::cin >> Sequences::SetsStructure::EditedSet;
    std::cout << "4.Выберите способ задания множеств" << std::endl;
    return true;
}
__declspec(dllexport) bool RecursiveAdditionOfSet(Sequences::SetsStructure* setsStructure)
{
    std::cin.ignore(10,'\n');
    std::cout << "1. Ввод количества элементов множества с номером" << Sequences::SetsStructure::NumberOfSet-1 << std::endl;
    std::cin >> Sequences::SetsStructure::NumberOfElements;
    fflush(stdin);
    Sequences::SetsStructure::NumberOfSets = new int Sequences::SetsStructure::NumberOfElements-1;
    for (Sequences::SetsStructure::count = 0; &Sequences::SetsStructure::count < Sequences::SetsStructure::NumberOfSets-1; Sequences::SetsStructure::count++)
    {
        Sequences::SetsStructure::RecurrenceEquations[Sequences::SetsStructure::count] = new double Sequences::SetsStructure::NumberOfSets-1;
        Sequences::SetsStructure::ElementsOfSets[Sequences::SetsStructure::count] = new double Sequences::SetsStructure::NumberOfSets-1;
    }
    std::cout << "2.Ввод первого члена последовательности (x(0))" << std::endl;
    std::cin >> Sequences::SetsStructure::ElementsOfSets[0][0];
    fflush(stdin);
    std::cout << "3.Ввод способа выражения для последующих членов последовательности" << std::endl;
    std::cin >> Sequences::SetsStructure::RecurrenceRelation;
    return true;
}
 
//Sequences.h
#pragma once
#include "iostream"
#include "locale.h"
class Sequences
{
public:
    struct SetsStructure
    {
        static double **RecurrenceEquations;
        static double **ElementsOfSets;
        static int *NumberOfSets;
        static int NumberOfElements;
        static int NumberOfSet;
        static int MethodOfDirect;
        static int EditedSet;
        static int RecurrenceRelation;
        static int count;
    };
    __declspec(dllexport) bool InputSets(SetsStructure* setsStructure);
    __declspec(dllexport) bool RecursiveAdditionOfSet(SetsStructure* setsStructure);
};
Переделал. Теперь компилятор выдаёт 3 ошибки:
Ошибка 2 error C2143: синтаксическая ошибка: отсутствие ";" перед "Sequences::SetsStructure::NumberOfElements" c:\%...%\Sequences\Sequences\Sequences.cpp 26 Sequences
Ошибка 4 error C2143: синтаксическая ошибка: отсутствие ";" перед "Sequences::SetsStructure::NumberOfSets" c:\%...%\Sequences\Sequences\Sequences.cpp 29 Sequences
Ошибка 6 error C2143: синтаксическая ошибка: отсутствие ";" перед "Sequences::SetsStructure::NumberOfSets" c:\%...%\Sequences\Sequences\Sequences.cpp 30 Sequences
Что на этот раз неверно? Всё же первый раз в первый класс

Добавлено через 58 секунд
У fflush() какая область видимости?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
02.07.2012, 10:53 12
Цитата Сообщение от Glam_Man Посмотреть сообщение
У fflush() какая область видимости?
Обычная. В пространство имен она не входит.
Было бы лучше если бы ты показал код целиком.
0
6 / 6 / 3
Регистрация: 15.10.2011
Сообщений: 73
02.07.2012, 10:59  [ТС] 13
Цитата Сообщение от lazybiz Посмотреть сообщение
Обычная. В пространство имен она не входит.
Было бы лучше если бы ты показал код целиком.
C++
1
//recource.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Sequences.h
#pragma once
#include "iostream"
#include "locale.h"
class Sequences
{
public:
    struct SetsStructure
    {
        static double **RecurrenceEquations;
        static double **ElementsOfSets;
        static int *NumberOfSets;
        static int NumberOfElements;
        static int NumberOfSet;
        static int MethodOfDirect;
        static int EditedSet;
        static int RecurrenceRelation;
        static int count;
    };
    __declspec(dllexport) bool InputSets(SetsStructure* setsStructure);
    __declspec(dllexport) bool RecursiveAdditionOfSet(SetsStructure* setsStructure);
};
C++
1
2
// stdafx.h
#pragma once
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
//AssemblyInfo.cpp
#include "stdafx.h"
 
using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::CompilerServices;
using namespace System::Runtime::InteropServices;
using namespace System::Security::Permissions;
 
[assembly:AssemblyTitleAttribute("Sequences")];
[assembly:AssemblyDescriptionAttribute("")];
[assembly:AssemblyConfigurationAttribute("")];
[assembly:AssemblyCompanyAttribute("DreamLair")];
[assembly:AssemblyProductAttribute("Sequences")];
[assembly:AssemblyCopyrightAttribute("Copyright (c) DreamLair 2012")];
[assembly:AssemblyTrademarkAttribute("")];
[assembly:AssemblyCultureAttribute("")];
 
[assembly:AssemblyVersionAttribute("1.0.*")];
 
[assembly:ComVisible(false)];
 
[assembly:CLSCompliantAttribute(true)];
 
[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];
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
//Sequences.cpp
// Главный DLL-файл.
#include <stdafx.h>
#include "Sequences.h"
__declspec(dllexport) bool InputSets(Sequences::SetsStructure* setsStructure)
{
    int Size;
    std::cin.ignore(10,'\n');
    std::cout << "1.Ввод способа добавления данных" << std::endl;
    std::cin >> Sequences::SetsStructure::MethodOfDirect;
    fflush(stdin);
    std::cout << "2.Ввод количество задаваемых множеств" << std::endl;
    std::cin >> Sequences::SetsStructure::NumberOfSets[0];
    fflush(stdin);
    std::cout << "3.Ввод номера редактируемого множества" << std::endl;
    std::cin >> Sequences::SetsStructure::EditedSet;
    std::cout << "4.Выберите способ задания множеств" << std::endl;
    return true;
}
__declspec(dllexport) bool RecursiveAdditionOfSet(Sequences::SetsStructure* setsStructure)
{
    std::cin.ignore(10,'\n');
    std::cout << "1. Ввод количества элементов множества с номером" << Sequences::SetsStructure::NumberOfSet-1 << std::endl;
    std::cin >> Sequences::SetsStructure::NumberOfElements;
    fflush(stdin);
    Sequences::SetsStructure::NumberOfSets = new int Sequences::SetsStructure::NumberOfElements-1;
    for (Sequences::SetsStructure::count = 0; &Sequences::SetsStructure::count < Sequences::SetsStructure::NumberOfSets-1; Sequences::SetsStructure::count++)
    {
        Sequences::SetsStructure::RecurrenceEquations[Sequences::SetsStructure::count] = new double Sequences::SetsStructure::NumberOfSets-1;
        Sequences::SetsStructure::ElementsOfSets[Sequences::SetsStructure::count] = new double Sequences::SetsStructure::NumberOfSets-1;
    }
    std::cout << "2.Ввод первого члена последовательности (x(0))" << std::endl;
    std::cin >> Sequences::SetsStructure::ElementsOfSets[0][0];
    fflush(stdin);
    std::cout << "3.Ввод способа выражения для последующих членов последовательности" << std::endl;
    std::cin >> Sequences::SetsStructure::RecurrenceRelation;
    return true;
}
C++
1
2
//stdafx.cpp
#include "stdafx.h"
Ещё 2 файла ресурсов
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
02.07.2012, 12:10 14
Тут много чего надо править...
Во-первых тебе надо избавиться от статических переменных, они ни к чему. Во-вторых убрать инклуды из заголовочных файлов. Их там быть не должно.
Вот простой пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//
// main.cpp
//
 
#include <iostream>
#include "main.h"
 
extern "C" __declspec( dllexport ) bool InputSets( test *p )
{
    std::cin >> p->a;
    return true;
}
 
extern "C" __declspec( dllexport ) bool RecursiveAdditionOfSet( test *p )
{
    p->a = 20;
    std::cout << p->a;
    return true;
}
C++
1
2
3
4
5
6
7
8
//
// main.h
//
 
class test {
public:
    int a;
};
Измени по аналогии и все должно заработать.
extern "C" дает реальные имена экспортируемым функциям.
0
6 / 6 / 3
Регистрация: 15.10.2011
Сообщений: 73
02.07.2012, 13:17  [ТС] 15
Цитата Сообщение от lazybiz Посмотреть сообщение
Тут много чего надо править...
Во-первых тебе надо избавиться от статических переменных, они ни к чему. Во-вторых убрать инклуды из заголовочных файлов. Их там быть не должно.
Вот простой пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//
// main.cpp
//
 
#include <iostream>
#include "main.h"
 
extern "C" __declspec( dllexport ) bool InputSets( test *p )
{
    std::cin >> p->a;
    return true;
}
 
extern "C" __declspec( dllexport ) bool RecursiveAdditionOfSet( test *p )
{
    p->a = 20;
    std::cout << p->a;
    return true;
}
C++
1
2
3
4
5
6
7
8
//
// main.h
//
 
class test {
public:
    int a;
};
Измени по аналогии и все должно заработать.
extern "C" дает реальные имена экспортируемым функциям.
*p где объявлять и чем это является?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
02.07.2012, 13:49 16
*p - это указатель на твой класс.
Ты что вообще сделать то хочешь? Просто я не понимаю зачем ты поместил структуру в класс и хочешь передать в качестве параметра указатель на эту структуру.
0
6 / 6 / 3
Регистрация: 15.10.2011
Сообщений: 73
02.07.2012, 17:03  [ТС] 17
Я хочу организовать массив структур (допускаю, что этот способ - верх идиотизма, мне нужно хранить данные о множествах), если есть более адекватные способы - буду раз выслушать
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
02.07.2012, 17:16 18
Массив структур... вот массив структур:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
typedef struct {
    double RecurrenceEquations;
    double *ElementsOfSets;
    int NumberOfElements;
    int NumberOfSet;
} sets_t;
 
int main()
{
    ...
    sets_t    sets[100];    // <--- массив структур. 100 штук
    ...
    return 0;
}
1
6 / 6 / 3
Регистрация: 15.10.2011
Сообщений: 73
02.07.2012, 18:08  [ТС] 19
Цитата Сообщение от lazybiz Посмотреть сообщение
Массив структур... вот массив структур:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
typedef struct {
    double RecurrenceEquations;
    double *ElementsOfSets;
    int NumberOfElements;
    int NumberOfSet;
} sets_t;
 
int main()
{
    ...
    sets_t    sets[100];    // <--- массив структур. 100 штук
    ...
    return 0;
}
Т.е. в классе никакой структуры быть не должно? Тогда как в функция класса записывать передаваемые параметры и где их объявлять?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
02.07.2012, 18:47 20
Цитата Сообщение от Glam_Man Посмотреть сообщение
Тогда как в функция класса записывать передаваемые параметры и где их объявлять?
Если тебе надо через класс и структуру то наверное как-то так:
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
#include <stdio.h>
 
typedef struct {
    double RecurrenceEquations;
    double *ElementsOfSets;
    int NumberOfElements;
    int NumberOfSet;
} sets_t;
 
class Sequences {
protected:
    sets_t *    sets;
 
public:
    bool RecursiveAdditionOfSet( int, double );
};
 
bool Sequences::RecursiveAdditionOfSet( int n, double e )
{
    sets->NumberOfSet = n;
    return true;
}
 
int main()
{
    Sequences   seq;
    seq.RecursiveAdditionOfSet( 1, 2. );
    return 0;
}
1
02.07.2012, 18:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2012, 18:47
Помогаю со студенческими работами здесь

компилятор ругается на структуру
попалась вот такая вот структура для графа, но компилятору она не нравится.... template &lt;class...

Компилятор не видит структуру
Привет всем! Создаю новый проект Wndows Forms в среде программирования, как это сделать нашел на...

Не видит переменную внутри класса из другого класса
Созданы 2 класса внутри одного, 2-ой класс EHandler не видит переменные из GuiClass в чем может...

Почему компилятор не видит поле класса
class der&lt;Tematic&gt;:IComparer&lt;Tematic&gt;{ public int Compare(Tematic obj1, Tematic...


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

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