Есть два класса:
class ChangeButton
{
public:
ChangeButton(string ButtonCode, int ButtonType)
{
btn_code = ButtonCode;
btn_type = ButtonType;
}
std::string get_btn_code()
{
return btn_code;
}
int get_btn_type()
{
return btn_type;
}
private:
std::string btn_code;
int btn_type;
};
class Change
{
public:
Change(list<ChangeButton> Change_Button, list<ChangeButton> Change_To_Button)
{
change_btn_list = Change_Button;
change_to_btn_list = Change_To_Button;
}
list<ChangeButton> get_list_change_btn()
{
return change_btn_list;
}
list<ChangeButton> get_list_change_to_btn()
{
return change_to_btn_list;
}
private:
list<ChangeButton> change_btn_list;
list<ChangeButton> change_to_btn_list;
};
В коде мне необходимы:
list<Change> Changes;
list<ChangeButton> ChangeButtons;
list<ChangeButton> ChangeToButtons;
При компиляции проекта выскакивают многочисленные ошибки типа: Change необъявленный идентификатор, символ не является ни классом шаблон, ни функцией шаблон и т.п.
Я новичок в С++, поэтому делаю похоже как в С#.
В чём моя ошибка, подскажите пожалуйста. Буду благодарен, если покажете на примере.
// JsonReader.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include "rapidjson/istreamwrapper.h"
#include <iostream>
#include <string>
#include <fstream>
#include <list>
using namespace rapidjson;
using namespace std;
int main()
{
list<Change> Changes;
list<ChangeButton> ChangeButtons;
list<ChangeButton> ChangeToButtons;
ifstream ifs("json.js");
IStreamWrapper isw(ifs);
Document documentFromFile;
documentFromFile.ParseStream(isw);
Value& arr = documentFromFile["changes"]; // open the "changes" tag
if (arr.IsArray())
{
for (SizeType i = 0; i < arr.Size(); i++) // foreach the "changes" tag
{
Value& changes = arr[i];
Value& change_btns = changes["change_btns"];
if (change_btns.IsArray())
{
for (SizeType i = 0; i < change_btns.Size(); i++) //
{
Value& btn = arr[i];
cout << btn.GetType() << '\n';
}
}
}
}
system("pause");
return 0;
}
class ChangeButton
{
public:
ChangeButton(string ButtonCode, int ButtonType)
{
btn_code = ButtonCode;
btn_type = ButtonType;
}
std::string get_btn_code()
{
return btn_code;
}
int get_btn_type()
{
return btn_type;
}
private:
std::string btn_code;
int btn_type;
};
class Change
{
public:
Change(list<ChangeButton> Change_Button, list<ChangeButton> Change_To_Button)
{
change_btn_list = Change_Button;
change_to_btn_list = Change_To_Button;
}
list<ChangeButton> get_list_change_btn()
{
return change_btn_list;
}
list<ChangeButton> get_list_change_to_btn()
{
return change_to_btn_list;
}
private:
list<ChangeButton> change_btn_list;
list<ChangeButton> change_to_btn_list;
};
Классы нужно объявлять до момента использования. Функции и функции-члены можно объявлять предварительно, например так:
class Foo{
int v;
public:
Foo(int);
}
int main(){
//....
}
Foo::Foo(int v){
//...
}
Еще лучше вынести объявления в заголовочный файл.
Edit: Сами классы предварительно объявлять тоже можно, но при этом доступны только ссылки и указатели на них и запрещено их разыменование.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
В этой статье приведена следующая информация:
Есть приложение которое защищено проверкой подписи, но есть патч который подменяет оригинальную подпись -> она всегда вернаПатч изменяет...