我正在尝试使用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
//}
答案 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>