Спецификатор десятичного формата работает только с целочисленными типами :
Поддерживается: только с целыми типами.
blockquote>Кроме того, он используется для заполнения нулями слева, что не соответствует вашим ожиданиям. Для ваших целей вы можете просто привести к int:
var a = ((int)(((double)x.Row.Points / x.Row.Viewed) * 100)).ToString()
Массив должен иметь постоянную длину. Я имею в виду длину, которая является тем же для всех объектов того класса. Это вызвано тем, что компилятор должен знать размер каждого объекта, и это должно быть то же для всех объектов того конкретного класса. Так, следующее сделало бы это:
class Entities
{
private:
static const int maxLimit = 50;
int objects[maxLimit];
int currentUsage;
public:
Entities();
bool addObject(int identifier);
void showStructure();
};
И в cpp файле:
const int Entities::maxLimit;
я предпочитаю использовать перечисление для этого, потому что я не должен буду определять помехи в cpp файле затем:
class Entities
{
private:
enum { maxLimit = 50 };
int objects[maxLimit];
int currentUsage;
public:
Entities();
bool addObject(int identifier);
void showStructure();
};
, Если Вы хотите иметь на размер объекта из массива, затем можно использовать динамический массив. vector
такой:
class Entities
{
private:
const int maxLimit;
std::vector<int> objects;
int currentUsage;
public:
Entities();
bool addObject(int identifier);
void showStructure();
};
// Entities.cpp
Entities::Entities(int limit)
: maxLimit(limit), objects(limit), currentUsage(0)
{
cout << "Entities constructed with max of 50" << endl;
}
Лучший должен сделать как можно больше инициализации в списке инициализации.
Можно использовать аргумент шаблона, если необходимо установить размер массива во время компиляции:
template<size_t maxLimit>
class Entities
{
int objects[maxLimit];
public:
Entities() {}
...
};
Entities<1000> inst;
для динамичного выделения памяти, Вы, возможно, должны использовать 'новое' ключевое слово как
, объекты были бы определены как:
int * objects;
внутренняя часть конструктор Вы сделали бы:
objects = new int [maxLimit];
редактирование:
забыл упоминать, необходимо будет освободить массив, когда Вы будете сделаны, вероятно, в деструкторе класса.
delete[] objects;
const int
с должны быть инициализированы в объявлении. Если Вы не знаете значение, что это должно быть во время объявления, Вы оказываетесь перед необходимостью принимать другую стратегию.
необходимо будет создать массив в конструкторе при хранении указателя снаружи. Это то, что Вы хотите сделать?
В Вашем классе:
private:
int maxLimit;
int* objects;
И снаружи:
Entities::Entities() : maxLimit(50)
{
currentUsage = 0;
cout << "Entities constructed with max of 50" << endl;
objects = new int[maxLimit];
}
Entities::~Entities()
{
delete [] objects;
}
Если все объекты имеют ту же длину, то длина может быть статичной. Это делает это постоянным интегральным выражением позволенный как массив связанный:
class Entities
{
private:
static const int maxLimit = 50;
int objects[maxLimit];
int currentUsage;
//...
};
Помнят, что sizeof (Объекты) является допустимым выражением. Каждый объект Объектов имеет тот же самый размер.
Станд. использования:: вектор и Вы получаете ожидаемое поведение. Никакая потребность волноваться об указателях, копиях, и т.д.
#include <vector>
class Entities
{
private:
const int limit;
std::vector<int> objects;
public:
Entities(int a_limit)
: limit(a_limit), objects(a_limit)
{ }
void addObject(int identifier)
{
if (objects.size() == limit)
throw whatever;
objects.push_back(identifier);
}
};