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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ STL vector index operator http://www.cyberforum.ru/cpp-beginners/thread617412.html
что такое индекс оператор у контейнера вектор ??? по заданию надо задать доступ к произвольному элементу у в вектору использую индекс оператор.
C++ Число Фибоначчи без использования повторных вычислений Всем привет. Надо написать программу вычисления числа Фибоначчи рекурсивно, причем избегая повторных вычислений. То есть запоминать найденные значения, чтобы не вычислять их каждый раз заново. Попробовал сделать через динамический массив, но в конце работы программы при освобождении памяти, выделенной под массив, выкидывает ошибку. Как ее исправить? #include <conio.h> #include... http://www.cyberforum.ru/cpp-beginners/thread617410.html
Найти сумму элементов того массива, в котором больше положительных чисел C++
Program ABC; Const n=10; m=20; type t1=array of integer; t2=array of integer; var a:t1; b:t2; i,s,k1,k2: integer;
C++ Неправильно работает код
Вот ссылка на код #include <iostream> #include <cmath> using namespace std; int main() { cout<<"Введите число "<<endl; int n,k=3; double x1=1,x2=2,x3=1.6667; cin>>n;
C++ Как экспортировать переменную (константу) из dll http://www.cyberforum.ru/cpp-beginners/thread617379.html
Понимаю что очень глупый вопрос, но нету времени.. Как экспортировать константу и потом ее получить, динамически подгрузив библу. Функции экспортирую так #ifdef __cplusplus #define EXPORT extern "C" __declspec (dllexport) #else #define EXPORT __declspec (dllexport) #endif
C++ Программа в виде шаблона функции помогите оформить программу в виде шаблона функции, пожалуйста! #include <iostream> using namespace std; int main() { const int size = 4; подробнее

Показать сообщение отдельно
Glam_Man
6 / 6 / 0
Регистрация: 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::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() какая область видимости?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru