一个类有一个静态计数器,在创建一个对象时会向上计数。 Get-Method()返回计数器值 现在我尝试使用该计数器值初始化main函数中的变量,稍后我将用它来设置数组长度,但是我在VS 2010上遇到以下错误:
块引用 错误2错误C2466:无法分配常量大小为42的数组 错误6错误C2133:'tInitPositions':未知大小43
那么为什么不允许使用静态计数器值设置arraylength?转换为(int const,...)甚至不能解决问题
这是我的问题的最小代码:
http://www.fpaste.org/98890/99145533/
答案 0 :(得分:1)
要使用编译时大小的数组,请使用
T array_variable[100]; // or some other fixed number of elements
或std::array
(请参阅代码示例)。
要拥有运行时大小的数组,请使用std::vector
:
int const crobotscreated = Robot::GetRobotsCreated();
std::vector<std::thread> evalThreads(crobotscreated);
for (int i = 0; i < crobotscreated; ++i)
{
evalThreads[i] = std::thread(threadFunction, i);
}
#include <string>
#include <vector>
#include <thread>
struct TPosition {};
class Robot {
public:
Robot();
virtual ~Robot() {};
TPosition GetPos() { return mPos; }
static int mRobotIndex;
static int GetRobotsCreated();
private:
TPosition mPos;
protected:
void SetPos();
};
Robot::Robot() {
mRobotIndex++;
}
int Robot::GetRobotsCreated() {
return mRobotIndex;
}
int Robot::mRobotIndex=0;
#include <iostream>
#include <mutex>
void threadFunction(int i)
{
static std::mutex mx;
std::lock_guard<std::mutex> lk(mx); // take a lock for console output
std::cout << "Yoohoo from " << i << "\n";
}
int main()
{
std::array<Robot, 10> robots;
int const crobotscreated = Robot::GetRobotsCreated();
std::vector<std::thread> evalThreads(crobotscreated);
for (int i = 0; i < crobotscreated; ++i)
{
evalThreads[i] = std::thread(threadFunction, i);
}
for (int i = 0; i < crobotscreated; ++i)
{
if (evalThreads[i].joinable())
evalThreads[i].join();
}
}