【问题标题】:Trouble with redefining operator+ (c++)重新定义运算符+(c++)的问题
【发布时间】:2013-06-16 12:00:10
【问题描述】:
class Community
{
private:
    char* Name;
    char foundationDate[11];
    Person founderPtr;
    int maxMembersCount;
    int membersCount;
    Person* members;
    static int communitiesCount;
public:

.
.
.
Person* operator+(Community&); // operator + prototype (must return array of members)
};

Person* Community::operator+(Community& other)
{
Community temp("temp","12.11.1993",other.getFounder());
Person* ptr;
    for(int i = 0 ; i < this->getMembersCount() ; i++)
{
        for(int j = 0 ; j < other.getMembersCount() ; j++)
    {

        if(strcmp(this->members[i].getEGN(),other.members[j].getEGN()) == 0)
        {
            temp.addMember(other.members[j]);
        }
    }
}
ptr = temp.getMembers();
return ptr;
}

如果我在函数中cout&lt;&lt; ptr[i]; 我可以看到一切正常,但是当我尝试时:

 Community S("obshnost","12.11.2010",A);
Community R("community","11.10.2011",B);
S.addMember(C);
S.addMember(Z);
R.addMember(C);


Person* ptr = S+R;
 for(int i = 0 ; i<2 ; i ++)
{
cout<<ptr[i];
 }

我看到了混乱的结果......如果有人知道我应该寻找什么,我会很感激 :)

【问题讨论】:

  • 这整件事毫无意义。请显示一些代码,其中所需的 op+ 将用于某些好处。
  • 看起来您正在计算普通成员的列表。顺便说一句,你可以return temp.getMembers(),不需要混淆变量ptr
  • 同意您的帖子令人困惑。但是,我认为您正在苦苦挣扎,部分原因是您避免使用标准数据结构。尝试使用 std::vector 或 QList 或类似的东西来保存您的成员列表。

标签: c++ arrays class object redefine


【解决方案1】:

如果没有看到你的源代码的其余部分,我不能肯定地说,但我猜你的 + 运算符正在返回一个指向已经释放的内存的指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    相关资源
    最近更新 更多