错误LNK2019,不知道发生了什么

时间:2015-03-01 23:45:26

标签: c++ lnk2019

我有这个课程:

    #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

这让我发疯了。请帮我。 我看不出我做错了什么。

1 个答案:

答案 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?