Southmountain Ответов: 1

Конфликты объявлений в статической библиотеке win32 в visual studio 2017


Я пытаюсь построить устаревший статический lib-проект Win32. он добавил свой собственный класс CString и CFile. они предназначены для того, чтобы избежать прямого использования библиотеки MFC, но допускают одни и те же перегрузки оператора. поэтому, когда я компилирую этот проект, он выдает сообщение об ошибке:

Severity	Code	Description	Project	File	Line	Suppression State
Error	C2666	'CString::operator +': 2 overloads have similar conversions	diffengine	c:\demo_temp\diffengine\filepartition.cpp	443	


ошибка указывает на второй знак плюс +:
for (i=0; i<nbFiles; i++)
		AddString( szIndent + "    " + arrFiles.GetAt(i) );


поэтому я думаю, что мой проект статической библиотеки win32 настроен на использование MFC где-то, но я выбрал использовать стандартные библиотеки windows уже на странице свойств проекта.

может ли кто-нибудь сказать мне, как устранить эти конфликты деклараций?

миллион раз спасибо!

Что я уже пробовал:

Я создаю новый пустой проект статической библиотеки win32, а затем добавляю эти файлы из устаревшего проекта. эти сообщения об ошибках выдаются.

Richard MacCutchan

Пожалуйста, покажите код для вашего класса CString, который имеет перегрузки.

Southmountain

Я скопировал перегруженный оператор здесь:

class CString
{
    // Members
protected:
    char *m_str;

    // Constructor/Destructor
public:
    CString() 
    { 
        m_str = NULL;
    }
    CString(char *szInputSource) 
    { 
        m_str = NULL;
        if (szInputSource)
            Copy(szInputSource);
    }
    CString(const CString &szInputSource) 
    { 
        m_str = NULL;
        Copy(szInputSource.GetData());
    }
    ~CString()
    {
        Empty();
    }

// Methods
public:
    void operator +=(CString &szAdditionalString)
    {
        Append(szAdditionalString);
    }

    void operator +=(char *szAdditionalString)
    {
        Append(szAdditionalString);
    }

    void operator +=(char sAdditionalChar)
    {
        Append(sAdditionalChar);
    }

    CString operator +(CString &szAdditionalString)
    {
        CString szTemp = *this;
        szTemp.Append(szAdditionalString);
        return szTemp;
    }

    CString operator +(char *szAdditionalString)
    {
        CString szTemp = *this;
        szTemp.Append(szAdditionalString);
        return szTemp;
    }

    CString operator +(char sAdditionalChar)
    {
        CString szTemp = *this;
        szTemp.Append(sAdditionalChar);
        return szTemp;
    }

// binary + operator (global, with const parameters)
    friend CString operator+(const CString &sz1, const CString &sz2)
    {
        CString s = sz1;
        s += (CString&)sz2;
        return s;
    }

    friend CString operator+(CString &sz1, const char sz2)
    {
        CString s = sz1;
        s += (char)sz2;
        return s;
    }

    friend CString operator+(const char *sz1, CString &sz2)
    {
        CString s = (char*)sz1;
        s += sz2;
        return s;
    }

1 Ответов

Рейтинг:
1

Shao Voon Wong

Вы можете попробовать создать экземпляр CString для его + оператор за работу.

типы char* и char[] не имеют + оператор

for (i=0; i<nbFiles; i++)
		AddString( szIndent + CString("    ") + arrFiles.GetAt(i) );