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

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

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

Студворк — интернет-сервис помощи студентам
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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.07.2012, 16:36
Ответы с готовыми решениями:

Компилятор не видит объявление класса
//Cperson.h #pragma once #include &quot;variables.h&quot; #include &quot;Caudio.h&quot; #include &quot;Cblock.h&quot; #include &lt;vector&gt; enum part{DOWN, UP,...

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

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

19
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
01.07.2012, 16:45
C++
1
2
double *SetsStructure; // это как?
SetsScructure.NumberOfSet-1 // тут опечатка в названии
0
6 / 6 / 3
Регистрация: 15.10.2011
Сообщений: 73
01.07.2012, 16:49  [ТС]
Цитата Сообщение от 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
всегда в таких случаях есть смысл постить все ошибки сюда.
там случайно не конфликты из-за одинаковых имен структуры и переменной?
0
6 / 6 / 3
Регистрация: 15.10.2011
Сообщений: 73
01.07.2012, 18:55  [ТС]
Подредактировал код, теперь 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
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
01.07.2012, 19:06
Если нужен доступ к статическому члену, при отсутствии объекта, то можно использовать такой синтаксис:
C++
1
std::cout << "1. Ввод количества элементов множества с номером" << SetsStructure::NumberOfSet-1 << std::endl;
А вот это как? SetsStructure - название типа, вы ему присваиваете указатель на int.
C++
1
Sequences.SetsStructure = new int Sequences.NumberOfElements-1;
Или я чего не понимаю, или код мутный...
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
01.07.2012, 19:10
Glam_Man, скажи, а зачем ты все переменные объявил как static ? В этом есть необходимость?
0
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
01.07.2012, 19:13
Schizorb, очень мутный )
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
01.07.2012, 21:21
наверно потому, что статические функции класса экпортятся из дллки. абра кадабра получилась в общем. Не знаю можно ли и как экпортить классы. Но вот такой подход должен работать:

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
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
01.07.2012, 23:40
Цитата Сообщение от DU Посмотреть сообщение
наверно потому, что статические функции класса экпортятся из дллки.
Ты на мой вопрос отвечал?
0
6 / 6 / 3
Регистрация: 15.10.2011
Сообщений: 73
02.07.2012, 10:48  [ТС]
Цитата Сообщение от 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::NumberOfEleme nts" c:\%...%\Sequences\Sequences\Sequences.c pp 26 Sequences
Ошибка 4 error C2143: синтаксическая ошибка: отсутствие ";" перед "Sequences::SetsStructure::NumberOfS ets" c:\%...%\Sequences\Sequences\Sequences.c pp 29 Sequences
Ошибка 6 error C2143: синтаксическая ошибка: отсутствие ";" перед "Sequences::SetsStructure::NumberOfS ets" c:\%...%\Sequences\Sequences\Sequences.c pp 30 Sequences
Что на этот раз неверно? Всё же первый раз в первый класс

Добавлено через 58 секунд
У fflush() какая область видимости?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
02.07.2012, 10:53
Цитата Сообщение от Glam_Man Посмотреть сообщение
У fflush() какая область видимости?
Обычная. В пространство имен она не входит.
Было бы лучше если бы ты показал код целиком.
0
6 / 6 / 3
Регистрация: 15.10.2011
Сообщений: 73
02.07.2012, 10:59  [ТС]
Цитата Сообщение от 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
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
02.07.2012, 12:10
Тут много чего надо править...
Во-первых тебе надо избавиться от статических переменных, они ни к чему. Во-вторых убрать инклуды из заголовочных файлов. Их там быть не должно.
Вот простой пример:
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  [ТС]
Цитата Сообщение от 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
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
02.07.2012, 13:49
*p - это указатель на твой класс.
Ты что вообще сделать то хочешь? Просто я не понимаю зачем ты поместил структуру в класс и хочешь передать в качестве параметра указатель на эту структуру.
0
6 / 6 / 3
Регистрация: 15.10.2011
Сообщений: 73
02.07.2012, 17:03  [ТС]
Я хочу организовать массив структур (допускаю, что этот способ - верх идиотизма, мне нужно хранить данные о множествах), если есть более адекватные способы - буду раз выслушать
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
02.07.2012, 17:16
Массив структур... вот массив структур:
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  [ТС]
Цитата Сообщение от 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
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
02.07.2012, 18:47
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.07.2012, 18:47
Помогаю со студенческими работами здесь

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

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

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

Не видит переменную внутри класса из другого класса
Созданы 2 класса внутри одного, 2-ой класс EHandler не видит переменные из GuiClass в чем может быть проблема?:( package kz.home.gui; ...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru