我正在嘗試設定一個在編譯時使用未知大小的二維陣列初始化的類。我認為最好的方法是將陣列作為指標傳遞。這對一維陣列按預期作業,但是當我嘗試對二維陣列做同樣的事情時。我收到一個錯誤,指出它無法將引數 2 從 'char [3][3]' 轉換為 'char*'。有沒有人對我如何讓它作業有一個簡單的解釋?這是我的代碼。
測驗類.h:
#pragma once
#include <iostream>
class TestClass
{
public:
std::string name;
char *data;
TestClass(std::string name, char *data);
};
測驗類.cpp:
#include "TestClass.h"
TestClass::TestClass(std::string name, char *data)
{
this->name = name;
this->data = data;
}
主要.cpp:
#include "TestClass.h"
int main()
{
char TestArray[3][3] = {{ 'A', 'B', 'C' },
{ 'D', 'E', 'F' },
{ 'G', 'H', 'I' }};
TestClass Test("TestName", TestArray);
std::cout << Test.data[2] << std::endl;
return 1;
}
uj5u.com熱心網友回復:
您可以通過傳遞第一個元素的地址來傳遞二維陣列:
TestClass Test("TestName", &TestArray[0][0]);
但是TestClass應該如何知道陣列的維度呢?沒有辦法查詢資料或猜測。你還必須通過num_rowsand num_cols。
但后來我看到:
std::cout << Test.data[2] << std::endl;
那么現在您希望二維陣列是 C 樣式字串的一維陣列嗎?這不是您的資料所代表的。
您真的應該忘記所有 C 風格的雜亂無章并使用現代 C 構造。用于std::vector<std::string>存盤可變數量的字串。
uj5u.com熱心網友回復:
問題是建構式的第二個引數是型別,char*但是您傳遞的是一個二維陣列TestArray,該陣列將衰減到char (*)[3],并且由于沒有隱式轉換char(*)[3],char*您會得到上述錯誤。
要解決這個問題,您可以將建構式的第二個引數設定為指向大小陣列的指標3(但您還必須更改 的型別data)或者更好地使用std::vectorand std::string。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/481234.html
