0

我试图将赋值运算符重载为成员函数,以将字符串作为参数并将其值分配给A当前对象。我在下面的评论中发布了错误。

有人可以告诉我我做错了什么吗?我认为它与参数有关,可能与定义中的代码有关。

我不确定我是否正确地声明了它,但我是这样声明的:

WORD operator=(const string& other);

我这样定义它:

WORD WORD::operator=(const string& other) //<---not sure if I did the parameters Correctly
{
(*this) = other;
return (*this);
}

如果有帮助,这是整个文件:

#include <iostream>

using namespace std;

#pragma once

class alpha_numeric //node
{
   public:
char symbol; //data in node
alpha_numeric *next;//points to next node
};

class WORD
{
   public:
      WORD() : front(0) {length=0;}; //front of list initially set to Null
      WORD(const WORD& other);
      bool IsEmpty();
      int Length();
      void Insert(WORD bword, int position);
      WORD operator=(const string& other); 

   private:
      alpha_numeric *front; //points to the front node of a list
      int length;
};

WORD WORD::operator=(const string& other) //<---not sure if I did the parameters Correctly
{
      (*this) = other;
      return (*this);
}
4

2 回答 2

1

错误消息来自链接器;它告诉你它找到了同一个函数的多个定义。这是因为您在头文件中定义了函数,该文件已包含在多个源文件中,因此您最终得到了函数的多个定义。

于 2012-06-01T00:27:49.817 回答
1

好的 2 件事:

首先,您缺少复制构造函数的定义,因此无法编译。在您的班级中尝试此操作(仅显示部分实现):

WORD(const WORD& other)
: length(other.length)
{
    // Construct me !
}

其次,您的赋值运算符是正确的,但在所有控制路径上都是递归的。例如,它无限期地调用自己。您可能希望在方法内分配成员(同样,仅显示部分实现):

WORD WORD::operator=(const string& other)
{
    // Only copy the length, the rest is to be filled
    this.length = other.length;
    return (*this);
}

最后,正如其他人指出的那样,您的可执行文件中有多个相同符号的定义。要解决这个问题,您必须确保您的标头仅包含一次(#pragma once 应该负责这一点),而且还将所有实现细节从头文件移至源文件。例如,将 WORD WORD::operator=(const string& other) 的定义移动到 CPP 文件中。

于 2012-06-01T00:19:25.727 回答