错误C2440:“正在初始化”:无法从“ CTable”转换为“ CTable”

罗杰

老实说,我不知道为什么CTable无法转换为CTable?我正在尝试使重载运算符+返回串联的两个表。

错误C2440“正在初始化”:无法从“ CTable”转换为“ CTable”

第二个错误:错误(活动)E0334类“ CTable”没有合适的复制构造函数

#include <iostream>
#include <string>
#include "CTable.h"
int main() {
    CTable c_tab_1, c_tab_0;
    c_tab_0.vSetValueAt(0, 1);
    c_tab_0.vPrint();
    c_tab_0.bSetNewSize(4);
    c_tab_0.vPrint();
    c_tab_1.bSetNewSize(4);

    c_tab_0.vSetValueAt(0, 1);
    c_tab_0.vSetValueAt(1, 2);
    c_tab_0.vSetValueAt(2, 3);
    c_tab_0.vSetValueAt(3, 4);
    c_tab_0.vPrint();

    c_tab_1.vSetValueAt(0, 2);
    c_tab_1.vSetValueAt(1, 3);
    c_tab_1.vSetValueAt(2, 4);
    c_tab_1.vSetValueAt(3, 5);
    c_tab_1.vPrint();

    c_tab_1.vSetValueAt(2, 123);
    c_tab_0.vPrint();
    c_tab_1.vPrint();

    CTable c_tab_3 = c_tab_0 + c_tab_1; //Error C2440!  <-----------------------
    c_tab_3.vPrint();

    return 0;
}
#include <iostream>
#include <string>

using namespace std;

class CTable {

public:
    CTable();
    CTable(CTable& pcOther);
    CTable* pcClone();
    ~CTable();

    bool bSetNewSize(int iTableLen);
    void vSetValueAt(int iOffset, int iNewVal);
    void vPrint();
    CTable operator+(const CTable& pcNewTable);

private:

    string s_name;
    int i_size;
    int* piTable;

    const int SIZE = 10;
    const string NAME = "Name";
};
#include <iostream>
#include <string>
#include "CTable.h"

using namespace std;

CTable::CTable() {

    s_name = NAME;
    cout << "bezp: " << s_name << endl;
    piTable = new int[SIZE];
    i_size = SIZE;
}
///
CTable::CTable(CTable& pcOther) {

    s_name = pcOther.s_name + "_copy";
    piTable = new int[pcOther.i_size];
    i_size = pcOther.i_size;
    for (int i = 0; i < pcOther.i_size; i++) {
        piTable[i] = pcOther.piTable[i];
    }
    cout << "kopiuj: " << s_name << endl;
}

CTable::~CTable() {
    delete[] piTable;
    cout << "usuwam " << s_name << endl;
}
////
bool CTable::bSetNewSize(int iTableLen) {

    if (iTableLen <= 0) {
        return false;
    }

    int* pi_newTable = new int[iTableLen];
    memcpy(pi_newTable, piTable, iTableLen);
    delete this->piTable;
    this->i_size = iTableLen;
    this->piTable = pi_newTable;

    return true;
}
///
void CTable::vSetValueAt(int iOffset, int iNewVal) {
    if (iOffset >= this->i_size) {
        return;
    }
    piTable[iOffset] = iNewVal;
}

void CTable::vPrint() {
    for (int i = 0; i < i_size; i++) {
        cout << piTable[i] << " ";
    }
    cout << endl;
}

CTable CTable::operator+(const CTable& pcNewTable) {
    CTable result;

    int greater_len = i_size < pcNewTable.i_size;
    int smaller_len = i_size > pcNewTable.i_size;
    int* greater_table = i_size > pcNewTable.i_size ? piTable : pcNewTable.piTable;
    int* smaller_table = i_size <= pcNewTable.i_size ? piTable : pcNewTable.piTable;

    result.i_size = greater_len;
    result.piTable = new int[greater_len];

    memcpy(result.piTable, greater_table, greater_len * sizeof(int));

    for (int i = 0; i < smaller_len; i++) {
        result.piTable[i] += smaller_table[i];
    }

    return result;
}

我应该纠正什么?

天龙座

尝试定义

    CTable(const CTable& pcOther)
    { 
     .......
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何解决错误 C2440“正在初始化”:无法从“_Ty”转换为“_Objty”

C ++错误C2440:“正在初始化”:无法从“类名”转换为“相同的类名”

C2440:“正在初始化”:无法从“A<double>”转换为“A<double>”

错误C2440:'正在初始化':无法从'初始化列表'转换为'std :: vector <char *,std :: allocator <_Ty >>'

const转发参考给出错误C2440:“正在初始化”:无法从“ const std :: string”转换为“ const std :: string &&”

mex编译错误C2440:“正在初始化”:无法从“ const mwSize *”转换为“ const int32_t *”

错误C2440:“正在初始化”:无法从

错误 C2440:“=”:无法从“const char *”转换为“LPCWSTR”

decltype错误C2440无法从'int *'转换为'int *&'

错误C2440:“ =”:无法从“ int *”转换为“ int **”

totals = FALSE仍在R包summarytools ctable()中输出总计吗?

错误23错误C2440:“返回”:无法从“字符[128]”转换为“字符(&&)[128]”

C ++嵌套类模板错误C2440'=':无法从'type'转换为'same type'

错误 C2440:“=”:无法从“int”转换为“uint32x4_t”

错误 C2440:“return”:无法从“char *const”转换为“LPCTSTR”

错误C2440'<函数样式-广播>':无法从'char'转换为'std :: string'

C2440:“ =”:无法从“ const char [9]”转换为“ char *”

错误 - “正在初始化”:无法从“glm::vec2”转换为“glm::vec3”

为什么在C ++中出现“初始化”:无法从“初始化列表”转换为“ _Objty”的错误?

C2440 static_cast无法从基类转换为派生类

编译CPython时出错:C2440'函数':无法从'PyObject'转换为PyObject *'

C2440无法从'void(_cdecl *)(int)'转换为'void(_cdecl&)(int)

类型转换,“初始化”:无法从“ HtmlBuilder *”转换为“ HtmlElement”

结构初始化错误:无法从“ <括号包围的初始化程序列表>”转换为结构

编译器错误C4244:“正在初始化”:从“ __int64”转换为“ int”,可能会丢失数据

无法从“初始化列表”转换为 UserController

'初始化':无法从'Array <int,3>'转换为'int'

初始化时无法将“ <括号包围的初始化程序列表>”转换为“ int *”

错误C2440:“返回”:无法转换。适用于vs140,141,但不适用于vs142