类的静态计数器值无法初始化数组

时间:2014-05-03 18:09:22

标签: c++ arrays static initialization

一个类有一个静态计数器,在创建一个对象时会向上计数。 Get-Method()返回计数器值 现在我尝试使用该计数器值初始化main函数中的变量,稍后我将用它来设置数组长度,但是我在VS 2010上遇到以下错误:

  

块引用   错误2错误C2466:无法分配常量大小为42的数组   错误6错误C2133:'tInitPositions':未知大小43

那么为什么不允许使用静态计数器值设置arraylength?转换为(int const,...)甚至不能解决问题

这是我的问题的最小代码:
http://www.fpaste.org/98890/99145533/

1 个答案:

答案 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);
}

查看 Live On Coliru

#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();
    }
}