相关疑难解决方法(0)

什么类型有多维数组?

我正在编写自己的2d矩阵类.我想设计这个类的使用非常接近真正的数学符号.例如,我想访问元素作为矩阵[3,6].但是c ++并没有提供这种能力,但我可以通过下一种方式访问​​基本的多维数组:

int matrix[2][2] = {};
int val = matrix[1][0];
Run Code Online (Sandbox Code Playgroud)

所以我决定创建返回基数组的函数.对于这个角色,最好的函数是operator().所以我可以通过下一个方式访问:matrix()[1] [0].好的,我开始实施它并坚持:(.看看我有什么:

template <typename ValType>
class Matrix2D
{
protected:
    ValType m_data[2][2] = {};

public:
    ValType** operator()()  // <--- what type?
    {
        return m_data;
    }
}
Run Code Online (Sandbox Code Playgroud)

但我在上面的函数中收到了编译器错误

错误C2440:'return':无法从'double [2] [2]'转换为'double**'

我理解错误,但不知道我必须改变什么来避免这个错误?该函数必须返回什么类型?

c++ arrays c++11

2
推荐指数
2
解决办法
150
查看次数

返回数组C++

我似乎无法理解为什么这不起作用.

全局变量:

int genericSet[] = {1,2,3,4};

int main()...

int* function() {
    return &genericSet;
}
Run Code Online (Sandbox Code Playgroud)

为什么在尝试返回此数组时会给我一个错误?是因为它是一个全局变量,如果是这样,为什么会这么重要?我通常如何返回静态声明的数组?我意识到这是额外的工作返回一个全局变量,但它实际上是否阻止了这一点?我只是用它作为占位符并且一直出错.

c++ arrays

1
推荐指数
2
解决办法
160
查看次数

C++中的数组和长度

我试图将一个数组的长度作为参数传递给某个函数.代码如下所示:

double getAverage(int numbers[])
{
    int length = sizeof(numbers)/sizeof(numbers[0]);
    // here the result of the length is 1.
    int sum = 0;
    for (int i = 0 ; i < length ; i++)
    {
        sum += numbers[i];
    }
    return (double)sum / length;
}

int main()
{
    int numbers[8] = {1,2,3,4,5,6,7,8};
    //if I call here sizeof(numbers)/sizeof(numbers[0] the result will be 8 as it   
    //should be.
    cout << getAverage(numbers) << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何通过引用获取作为函数参数传递的数组长度(虽然我知道每个数组都通过引用传递)?我知道在C/C++中找到数组长度存在很多问题,但是没有人能给我一些我正在寻找的答案.提前致谢.

c++ arrays

1
推荐指数
1
解决办法
384
查看次数

使用C++在函数内获取数组大小

如果我在C++中有以下功能:

void functionName(HANDLE arr[100])
{
}

HANDLE hHandles[100];
functionName(hHandles);
Run Code Online (Sandbox Code Playgroud)

有没有办法知道functionName里面'arr'的大小?(没有硬编码)

c++ arrays

1
推荐指数
1
解决办法
182
查看次数

C++动态/静态数组作为函数的参数

我一直在尝试使用2D数组作为我的C++类中的构造函数的参数.

标题:

Matrix::Matrix(double **initComponents, int rows, int columns)
Run Code Online (Sandbox Code Playgroud)

如果我只是继续定期调用new和初始化子数组,将指针传递给构造函数,它的一切都很好但是我想,我可以用初始化器创建静态2D数组并将指针传递给构造函数?

double A[][3] = { {2.0, 3.0, 4.0} , {1.0, 3.0, 4.0} , {2.0, 3.0, 4.0} }; 
Matrix *mtx = new Matrix(A, 3, 3);
Run Code Online (Sandbox Code Playgroud)

这不起作用:(

MS Visual Studio编译器:

" error C2664: 'Matrix::Matrix(double **,int,int)' : cannot convert parameter 1 from 'double [3][3]' to 'double ** "
Run Code Online (Sandbox Code Playgroud)

有谁能解释为什么?我以为它会在引用和指针之间进行自动转换.

第二个问题是,为什么我只能声明A为double A[][],为什么我必须指定第二个维度,即使我指定了所有值.

c++ arrays parameters

1
推荐指数
1
解决办法
2798
查看次数

C++函数返回数组

我需要我的函数来返回一个数组,但它不会像大多数搜索示例所示的那样将数组作为参数.

代码是这样的:

double  myfunction ()
{
    double arr[10];
    //assign values to the array
    return arr;
}

main()
{
    double arr2[10];
    arr2[10] = myfunction;
    //print arr2
}
Run Code Online (Sandbox Code Playgroud)

当我使用指针显示数组时,我得到了像"CCCCCC"这样的值......

c++ arrays return-value

1
推荐指数
1
解决办法
4246
查看次数

数组下标符号和derefencing

大家好我对以下代码有疑问,并想验证我的一些断言.

int array[] = {1,2,3,4};
int* ptr = &array[1];
Run Code Online (Sandbox Code Playgroud)

是否&array[1]意味着我得到数组的地址并添加1,deference该地址以查看实际的整数然后获取存储在该地址中的整数的地址?

这是怎么做到的?是否有一个operator [](int index)用于返回引用的数组,然后我们获取它的地址?

我想了解机器实际上在做什么以及语言语义.

c++

1
推荐指数
2
解决办法
5422
查看次数

C++ 编译错误:数组具有不完整的元素类型“int []”

我正在用 C++ 编写康威的生命游戏。我收到一个编译时错误,这与我将二维数组传递给方法的方式有关:

gameoflife.cpp:5:25: error: array has incomplete element type 'int []'
void print_game(int game[][], int SIZE);

gameoflife.cpp:6:23: error: array has incomplete element type 'int []'
void run_game(int game[][], int SIZE);

gameoflife.cpp:7:23: error: array has incomplete element type 'int []'
void set_cell(int game[][], int i, int j, int next[][], int SIZE);
Run Code Online (Sandbox Code Playgroud)

等等。

我的代码的开头是:

void print_game(int game[][], int SIZE);
void run_game(int game[][], int SIZE);
void set_cell(int game[][], int i, int j, int next[][], int SIZE);
Run Code Online (Sandbox Code Playgroud)

显然问题从这里开始。

在方法中传递二维数组有什么问题?我应该改用 ** 吗?

c++ methods multidimensional-array

1
推荐指数
1
解决办法
1万
查看次数

char指针比较错误

使用C++ MFC和Visual Studio 2008.

抱歉新手问题,但我不确定为什么这不起作用.我正在创建一个函数,在char *传递给它的XML中找到XML的标准非法字符,但是我得到一个奇怪的错误.

char* XMLIllegalCharacterParser(char *input){
    char *Temp;
    for (size_t i = 0; i < strlen(input); i++){
        if(input[i] == "\"" || input[i] == "\'" || input[i] == "&")
    }
    return Temp;
}

1>.\FileImport.cpp(868) : error C2446: '==' : no conversion from 'const char *' to 'int'
Run Code Online (Sandbox Code Playgroud)

我不能为我的生活弄清楚为什么它不起作用.我有什么错误的语法?

PS:我知道那里我只有3个角色.我收到了这个错误,我想在添加其他两个之前修复它.

在这里我的后代码:

char* XMLIllegalCharacterParser(char *input){
char *Temp;
for (size_t i = 0; i < strlen(input); i++){
    switch(input[i]){
        case '\"':
            strcat_s(Temp, 6, "&quot;");
            break;
        case '\'':
            strcat_s(Temp, 6, "&apos;"); …
Run Code Online (Sandbox Code Playgroud)

c++ string pointers char

1
推荐指数
1
解决办法
240
查看次数

数组名称和指向第一个元素的另一个指针有什么区别?

有一个数组A,定义为int A[10],并且有另一个包含基址的指针,定义为int *ptr = A.

我最近看过这篇文章 如何找到'sizeof'(一个指向数组的指针)?,我无法弄清楚A和ptr之间的区别是什么.他们俩都不只是拥有阵列的基地址吗?

我们A[i] and ptr[i]现在可以互换使用,对于一些小于10的整数.

那么为什么使用sizeof()得到的结果有所不同?

c++ arrays pointers

1
推荐指数
1
解决办法
74
查看次数