我正在编写自己的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**'
我理解错误,但不知道我必须改变什么来避免这个错误?该函数必须返回什么类型?
我似乎无法理解为什么这不起作用.
全局变量:
int genericSet[] = {1,2,3,4};
int main()...
int* function() {
return &genericSet;
}
Run Code Online (Sandbox Code Playgroud)
为什么在尝试返回此数组时会给我一个错误?是因为它是一个全局变量,如果是这样,为什么会这么重要?我通常如何返回静态声明的数组?我意识到这是额外的工作返回一个全局变量,但它实际上是否阻止了这一点?我只是用它作为占位符并且一直出错.
我试图将一个数组的长度作为参数传递给某个函数.代码如下所示:
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++中有以下功能:
void functionName(HANDLE arr[100])
{
}
HANDLE hHandles[100];
functionName(hHandles);
Run Code Online (Sandbox Code Playgroud)
有没有办法知道functionName里面'arr'的大小?(没有硬编码)
我一直在尝试使用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[][],为什么我必须指定第二个维度,即使我指定了所有值.
我需要我的函数来返回一个数组,但它不会像大多数搜索示例所示的那样将数组作为参数.
代码是这样的:
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"这样的值......
大家好我对以下代码有疑问,并想验证我的一些断言.
int array[] = {1,2,3,4};
int* ptr = &array[1];
Run Code Online (Sandbox Code Playgroud)
是否&array[1]意味着我得到数组的地址并添加1,deference该地址以查看实际的整数然后获取存储在该地址中的整数的地址?
这是怎么做到的?是否有一个operator [](int index)用于返回引用的数组,然后我们获取它的地址?
我想了解机器实际上在做什么以及语言语义.
我正在用 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++ 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, """);
break;
case '\'':
strcat_s(Temp, 6, "'"); …Run Code Online (Sandbox Code Playgroud) 有一个数组A,定义为int A[10],并且有另一个包含基址的指针,定义为int *ptr = A.
我最近看过这篇文章 如何找到'sizeof'(一个指向数组的指针)?,我无法弄清楚A和ptr之间的区别是什么.他们俩都不只是拥有阵列的基地址吗?
我们A[i] and ptr[i]现在可以互换使用,对于一些小于10的整数.
那么为什么使用sizeof()得到的结果有所不同?
c++ ×10
arrays ×7
pointers ×2
c++11 ×1
char ×1
methods ×1
parameters ×1
return-value ×1
string ×1