如何在C ++中使用cstring库文件?

时间:2015-08-02 00:35:20

标签: string class

我正在尝试使用cstring。 我有两个

#include <cstring>

#include <string>

在我班上的课程中。

当我尝试编译时,GNU会发出消息,表示我认为该类函数尚未声明。 例如,“错误:':: memchr'尚未声明

如何正确使用此文件?

编辑:添加/解释我的代码

该项目是使String类提供诸如添加和比较字符串之类的函数(尽管也需要常规字符串类)。我怀疑问题与我的String类和库字符串类之间的冲突有关,所以我正在考虑更改#ifndef和#define行。
String.h代码:

  #ifndef STRING_H
  #define STRING_H

//#ifndef MYSTRING_H //experiment
//#define STRING_H   //experiment

#include <string>
#include <iostream>


using namespace std;


class String
{
    public:
        String();
        //String(const char*);
        String(char const*); //
        String(char);
        String(int);
        String(const String&);
        String(char, int);

        void print();
        int getLength();
        String substr(int, int);

        //overloads
        String& operator=(const String&);
        String& operator=(const char*);

        friend String operator+(const String&, const String&);
        friend String operator+(const String&, const char*); 
        friend String operator+(const char*, const String&);
        friend String operator+(const String&, char);
        friend String operator+(char, const String&);
        String operator+=(const String&);
        String operator+() const;
        friend int operator==(const String&, const String&);
        friend int operator!=(const String&, const String&);
        friend int operator< (const String&, const String&);
        friend int operator<=(const String&, const String&);
        friend int operator> (const String&, const String&);
        friend int operator>=(const String&, const String&);
        char& operator[](int);
        friend char* operator+(const String&, int);
        friend char* operator+(int, const String&);
        String& operator++(); //prefix
        String& operator--(); //prefix
        String operator++(int); //postfix
        String operator--(int); //postfix
        friend ostream& operator<<(ostream&, const String&);

        //virtual ~String();
    protected:
    private:
      int length;
      char* buf;
};

#endif // STRING_H

String.cpp代码:

#include <cstring>
#include <iostream>
#include "String.h"
#include <string>



using namespace std;

String::String()
{
    //ctor
    //cout <<"default ctor called" << endl;
}

String::String(char const*)
{

}

String::String(char)
{

}

String::String(int)
{

}

String::String(String const&)
{

}

String::String(char, int)
{

}

void String::print()
{
    cout << "printing something " << endl;
}

String String::substr(int, int)
{

}

int String::getLength()
{
    string h = "hi";
    //std::strlen(h);
    return length;
}

String& String::operator=(const String&)
{

}

String& String::operator=(const char*)
{

}

String operator+(const char*, const String&)
{

}

String operator+(const String&, const char*)
{

}

String operator+(const String&, const String&)
{

}

String operator+(const String&, char)
{

}

String operator+(char, const String&)
{

}

String String::operator+=(const String&)
{

}

String String::operator+() const
{

}

int operator!=(const String&, const String&)
{

}

int operator==(const String&, const String&)
{

}

int operator< (const String&, const String&)
{

}

int operator<=(const String&, const String&)
{

}

int operator> (const String&, const String&)
{

}

int operator>=(const String&, const String&)
{

}

char& String::operator[](int)
{

}

char* operator+(const String&, int)
{

}

char* operator+(int, const String&)
{

}

String& String::operator++()
{

}

String& String::operator--()
{

}

String String::operator++(int)
{

}

String String::operator--(int)
{

}

ostream& operator<<(ostream&, const String&)
{

}

//String::~String()
//{
//    //dtor
//}

2 个答案:

答案 0 :(得分:0)

标准库中的大多数内容都在C ++的std命名空间中,包括memchr之类的函数。您需要将其称为std::memchr,或者声明using std::memchr;之类的内容,将其称为memchr而不是std::memchr。 (还有using namespace std;,但that's a bad idea。)

答案 1 :(得分:0)

<cxxx>库不一定在全局命名空间中声明名称,如::name。 (但他们经常这样做。)

您需要将其称为std::memchr

允许::memchr的其他替代方法是使用#include <string.h>或编写using namespace std;(哎呀!),但实际上最好将std::放在标准库名称前面。< / p>