3

好吧,我难住了。对于静态成员变量和函数,我总是有点困难,所以如果这个问题的答案真的很明显,我很抱歉。不过,我不知道出了什么问题。

在 WSGrid.h 中:

#include <functional>

class WSGrid
{
public:
    //constructors...

    static const std::function< char( void ) > _randomChar;

    //private data...
};

在 WSGrid.cpp 中:

#include <random>

std::default_random_engine generator;
std::uniform_int_distribution< char > distribution;

const WSGrid::_randomChar = std::bind( distribution, generator );

在我的 main.cpp 中:

#include "WSGrid.h"
#include <iostream>

int main( int argc, char* argv[] )
{
    std::cout << WSGrid::_randomChar() << std::endl;
    return 0;
}

当我尝试编译 ( g++ -std=c++11 -Wall -pedantic main.cpp) 时,我得到“对 WSGrid::_randomChar 的未定义引用”。

所以……在我看来,我做的一切都是对的。至少据我所知,我正在遵循此处找到的语法。但显然有些不对劲。

4

1 回答 1

4

您需要_randomChar正确定义。

更新 :

const WSGrid::_randomChar = std::bind( distribution, generator );

至:

const std::function<char(void)> WSGrid::_randomChar = std::bind(distribution, generator);

你还需要链接WSGrid.cpp

g++ -std=c++11 -Wall -pedantic -c WSGrid.cpp -o WSGrid.o
g++ -std=c++11 -Wall -pedantic main.cpp WSGrid.o
于 2013-09-07T04:06:12.293 回答