我有这个课程:
#ifndef String_H
#define String_H
class String
{
public:
String();
String(const char*, ...);
String(const String&);
~String();
const String& operator= (const char*);
const int capacity();
void clear(){ string[0] = '\0'; }
const char* getString()const { return string; }
const int lenght()const { return length; }
private:
int length;
char *string;
void alloc(const int);
};
#endif
在实施中我有这个:
#include <wtypes.h>
#include "String.h"
#include "Log.h"
#include <stdio.h>
String::String()
{
alloc(1);
clear();
}
String::String(const char* _string, ...)
{
//length = 0;
if (_string != NULL)
{
static char buff1[4096];
va_list args;
va_start(args, _string);
int res = vsprintf_s(buff1, 4096, _string, args);
va_end(args);
if (res > 0)
{
alloc(res + 1);
strcpy_s(string, length, buff1);
}
}
else
{
alloc(1);
clear();
}
}
String::String(const String& _string)
{
if (&_string != NULL)
{
alloc(_string.lenght());
strcpy_s(string, length, _string.getString());
}
else
{
alloc(1);
clear();
}
}
String::~String()
{
delete[]string;
}
const String& String::operator= (const char* str)
{
if (strlen(str) > sizeof(string) + 1)
{
delete[] str;
alloc(strlen(str) + 1);
strcpy_s(string, length, str);
}
else
{
strcpy_s(string, length, str);
}
return (*this);
}
void String::alloc(const int size)
{
length = size;
string = new char[size];
}
在主要时我做:
String a;
String b("hi");
a = b;
编译器告诉我:
错误2错误LNK2019:未解析的外部符号“public:class String const&amp; __thiscall String :: operator =(class String const&amp;)”(?? 4String @@ QAEABV0 @ ABV0 @@ Z)在函数_main中引用C:.. \ main.obj
和
错误3错误LNK1120:1个未解析的外部C:.. \ MyLibrary.exe
这让我发疯了。请帮我。 我看不出我做错了什么。
答案 0 :(得分:1)
该行调用赋值运算符:
a = b;
您缺少一个带String
的赋值运算符。
这不是将被调用的赋值运算符:
const String& String::operator= (const char* str)
典型的赋值运算符具有以下签名:
String& String::operator= (const String& s)
请阅读“3规则”。 What is The Rule of Three?