我有一些已有15年历史的C ++代码,我试图将其带到更现代的时代。在这个阶段,我正在尝试使用Visual C ++ 6.0编译的代码现在使用VS 2003(Microsoft Visual C ++ .NET 69462-335-0000007-18915)进行编译。如果我们能够干净利落地进行编译运行正常,然后我们可以采取另一个步骤,使其进入更新版本的VS.但是我遇到了很多问题......
以下是(简化)代码的片段:
class toS
{
public:
toS() { buff[0] ='\0'; }
operator LPCTSTR() { return buff; }
protected:
void Append (TCHAR c)
{
LPTSTR p = buff + _tcslen(buff);
*p++ = c;
*p = '\0';
}
TCHAR buff[40];
};
class LtoS : public toS
{
public:
LtoS(LONG n, TCHAR c = '\0')
{
_ltot(n, buff, 10);
Append(c);
}
};
void WriteBool(const CString& Section, const CString& Key, bool Value);
CString Section;
int nLine = 0;
std::vector<bool> *BoolVect;
std::vector<bool>::iterator vi;
...
for (vi = BoolVect->begin(); vi != BoolVect->end(); vi++)
WriteBool(Section, "LineVis " + LtoS(nLine++), *vi);
...
从此我收到以下错误消息:
错误C2677:二进制'+':找不到采用'LtoS'类型(或没有可接受的转换)的全局运算符
知道这段代码是如何运作的吗?如果我能找到它过去所做的事情,我可以开始定义重载的运算符+以匹配功能。
答案 0 :(得分:0)
从多条评论中获取,尝试将公开转换运算符添加到class toS
,如下所示:
operator LPCTSTR() const { return &buff[0]; }
您可能还需要在for
循环中显式构造字符串,例如:
WriteBool(Section, CString("LineVis ") + static_cast<LPCTSTR>(LtoS(nLine++)), *vi);
(旁注:您可能知道,因为您刚刚提取代码示例,这里存在问题:
std::vector<bool> BoolVect;
...
for (vi = BoolVect->begin(); vi != BoolVect->end(); vi++)
您用来访问BoolVect
的符号表示它是一个指针,但在您的示例中并未将其声明为此。)
答案 1 :(得分:0)
当我使用以下命令从CString继承类时,编译器错误消失了:
class tos : public CString { ... }
希望这不仅会编译,而且会正确执行......