gpt4 book ai didi

c++ - 无法从类中访问全局交换函数

转载 作者:行者123 更新时间:2023-11-28 00:27:07 25 4
gpt4 key购买 nike

这是我在网站上的第一个问题。

今天遇到一个小问题。我无法在赋值运算符内调用全局函数 Swap 并从 DynamicArray 模板类移动构造函数。当我尝试执行此操作时,出现错误 C2660:

'DynamicArray<int>::Swap' : function does not take 2 arguments.

这对我来说很奇怪,因为我可以在 main 函数中用 2 个参数调用这个函数。有谁知道这是什么原因?

#include <iostream>
#include <stdexcept>

using std::cout;
using std::cin;
using std::endl;

template <typename T>
class DynamicArray;

template <typename T>
inline void Swap(DynamicArray<T>& lhs, DynamicArray<T>& rhs) {

lhs.Swap(rhs);
}

template <typename T>
class DynamicArray {

public:
DynamicArray(size_t Size = 0, T Content = T())
: m_Size(Size), m_Array(Size ? new T[m_Size] : nullptr) {

for (size_t i = 0; i < m_Size; ++i) {

m_Array[i] = Content;
}
}

DynamicArray(const DynamicArray<T>& rhs)
: m_Size(rhs.m_Size), m_Array(m_Size ? new T[m_Size] : nullptr) {

std::copy(rhs.m_Array, rhs.m_Array + m_Size, m_Array);
}

DynamicArray(DynamicArray<T>&& rhs)
: DynamicArray<T>() {

this->Swap(rhs);
//Swap(*this, rhs); //C2660
}

DynamicArray<T>& operator= (DynamicArray<T> rhs) {

this->Swap(rhs);
//Swap(*this, rhs); //C2660

return *this;
}

~DynamicArray() {

delete [] m_Array;
}

void Swap(DynamicArray<T>& rhs) {

std::swap(m_Size, rhs.m_Size);
std::swap(m_Array, rhs.m_Array);
}

private:
size_t m_Size;
T* m_Array;
};

int main() {

DynamicArray<int> DA1(4, 64);
DynamicArray<int> DA2(2, 33);

DA1 = std::move(DA2); //using move constructor

DynamicArray<int> DA3(8, 4);
DynamicArray<int> DA4(2, 55);

DA3 = DA4; //using assignment operator

Swap(DA1, DA3); //here I can call this function with 2 arguments

cout << endl;
system("pause");
}

最佳答案

要指定您要调用全局交换,您应该在它前面加上范围解析运算符 ::,就像这样 ::Swap(...)

自从我上次用 C++ 编写代码以来已经有很长一段时间了,但我相信当在成员方法中使用时,成员 Swap 方法在 Swap 符号的解析中具有优先权。

关于c++ - 无法从类中访问全局交换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24476660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com