std::计数分隔符问题 我有一段我想理解的C++片段:

std::计数分隔符问题 我有一段我想理解的C++片段:,c++,C++,在.hh文件中: class A { private: //recordDelimiter is a '+' character // I can do this because char is an integral type! static const char recordDelimiter = '+'; void f() { .... //serializedData is a std:;string

在.hh文件中:

class A
{
private:
    //recordDelimiter is a '+' character
    // I can do this because char is an integral type!
    static const char recordDelimiter = '+';

    void f()
    {
        ....
        //serializedData is a std:;string
        //Get number of times A::recordDelimiter is found i.e. Number of objects

        // Non-Functional
        int times = (int) std::count (serializedData.begin(), serializedData.end(), A::recordDelimiter);

        // Functional
        const char recDel = A::recordDelimiter;
        int times = (int) std::count (serializedData.begin(), serializedData.end(), recDel);

        // Functional
        int times = (int) std::count (serializedData.begin(), serializedData.end(), '+');

        ....
    }
};
从std::count引用中,这是函数的签名:

template <class InputIterator, class T>
  typename iterator_traits<InputIterator>::difference_type
    count (InputIterator first, InputIterator last, const T& val)

然后将其传递给std::count works?

您已声明但未定义,
A::recordDelimiter
。将此行添加到一个源代码文件中:

const char A::recordDelimiter;
初始化静态常量成员但不定义它的快捷方式可以被认为是提供了一个值,但不是该成员的实际对象。所以这是有道理的:

char foo = A::recordDelimiter; // just substitute '+' for the rhs here
但这并不是:

char *foo = & A::recordDelimiter; // Oops, no such object, so it can't have an address
在问题中的情况下,
std::count
接受一个
const T&
作为参数。由于对象已声明但未定义,因此它不存在。因此,将引用绑定到不存在的对象是没有意义的


明确地说,在这里提供初始值设定项是合法的,并且永远不要定义对象。但是您不能获取这样一个已声明和初始化但未定义的对象的地址,也不能将其绑定到引用。

您已声明但未定义,
a::recordDelimiter
。将此行添加到一个源代码文件中:

const char A::recordDelimiter;
初始化静态常量成员但不定义它的快捷方式可以被认为是提供了一个值,但不是该成员的实际对象。所以这是有道理的:

char foo = A::recordDelimiter; // just substitute '+' for the rhs here
但这并不是:

char *foo = & A::recordDelimiter; // Oops, no such object, so it can't have an address
在问题中的情况下,
std::count
接受一个
const T&
作为参数。由于对象已声明但未定义,因此它不存在。因此,将引用绑定到不存在的对象是没有意义的


明确地说,在这里提供初始值设定项是合法的,并且永远不要定义对象。但是您不能获取这样一个已声明和初始化但未定义的对象的地址,也不能将其绑定到引用。

啊!您声明了::recordDelimiter,但从未定义它。这在头文件中吗?如果是这样,您需要在源文件中为其添加相应的定义。

啊!您声明了::recordDelimiter,但从未定义它。这在头文件中吗?如果是这样,您需要在源文件中为其添加相应的定义。

serializedData的类型是什么??这是一些小的调整来填充缺少的代码。
serializedData的类型是什么?这是一些小的调整来填充缺少的代码。太棒了+因为你以10秒的优势击败了我。显然,谁杀了我,谁也杀了你。真的很好。他怎么没有定义它呢?它在类中表示
='+'
,这意味着它被定义对了吗?不,伙计们,它被声明和定义了!char是一个整数类型,因此静态常量char recordDelimiter='+';应该有用。顺便说一句,我没有这个代码的cpp文件。不,@David the
='+'
不是一个定义。这仍然是一个宣言,太棒了+因为你以10秒的优势击败了我。显然,谁杀了我,谁也杀了你。真的很好。他怎么没有定义它呢?它在类中表示
='+'
,这意味着它被定义对了吗?不,伙计们,它被声明和定义了!char是一个整数类型,因此静态常量char recordDelimiter='+';应该有用。顺便说一句,我没有这个代码的cpp文件。不,@David the
='+'
不是一个定义。这仍然是一项宣言。