C++ 指针和双精度转换错误,代码没有错误

C++ 指针和双精度转换错误,代码没有错误,c++,pointers,variables,naming-conventions,C++,Pointers,Variables,Naming Conventions,我正在编写一个代码,它应该获取2D数组的大小、数组中某个区域的位置以及数组内容的输入。在这一点上,它对这些指针没有任何作用,但是当我试图编译这段代码时,它给了我关于指针的错误。我以前从未使用过指针,这段代码也不例外 实际上,我已经通过使变量名无数解决了这个问题,但我真的很好奇为什么会发生这个错误 包括 使用名称空间std; int n,m,a,b; int x0,x1,y0,y1; int main { //FREONSERI3.gir、r、stdin; //freopenseri3.cik,w

我正在编写一个代码,它应该获取2D数组的大小、数组中某个区域的位置以及数组内容的输入。在这一点上,它对这些指针没有任何作用,但是当我试图编译这段代码时,它给了我关于指针的错误。我以前从未使用过指针,这段代码也不例外

实际上,我已经通过使变量名无数解决了这个问题,但我真的很好奇为什么会发生这个错误

包括 使用名称空间std; int n,m,a,b; int x0,x1,y0,y1; int main { //FREONSERI3.gir、r、stdin; //freopenseri3.cik,w,stdout; cin>>n>>m; cin>>x0>>x1>>y0>>y1; x0-、x1-、y0-、y1-; int f[n][m],g[n][m]; 对于int i=0;i>f[i][j]; 如果j>y0 | | jx0 | i有两个错误我可以重现

首先,POSIX标准规定:

这些函数与变量声明冲突,并导致以下诊断:

还将出现其他错误,因为您将这些函数当作整数使用。要解决此问题,请不要声明已在使用的名称

一个避免名称冲突的通用解决方案是在您自己的名称空间中声明所有内容。然后您只需要想出一个未使用的全局名称。在这种情况下,一个简单的解决方案是根本不全局声明变量,而是使用局部变量

其次,程序的格式不正确,因为您使用的数组大小不是编译时常量。结果诊断:

修复这个,要么使用常数大小数组,要么动态分配。< /P> < P>我使用了包含和包含而不是包含来修复它。感谢ErReKa,提到Y0和Y1是函数。< /P> < P> C++编写的代码,而不是在G++……/P>中编写的代码。

#include <iostream>

int main()
{
    using std::cin;
    using std::cout;
    using std::endl;
    int n, m;// , a, b; a and b are never used
    int x0, x1, y0, y1; // Declare them as local variables to avoid clash with ::y0() function
    //  freopen("seri3.gir","r",stdin);
    //  freopen("seri3.cik","w",stdout);
    cin >> n >> m;
    cin >> x0 >> x1 >> y0 >> y1;
    x0--, x1--, y0--, y1--;
    //  int f[n][m], g[n][m]; // Run-time sized arrays are g++ - not c++ !!!
    int f[10][10], g[10][10];
    if (n > 10 || m > 10)
        cout << "Array to big!" << endl;
    else for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> f[i][j];
            if ((j > y0 || j < y1) && (i > x0 || i < x1)) {
                g[j][i] = f[j][i];
                f[j][i] = 0;
                cout << g[j][i] << endl;
            }
        }
    }
}

请发布错误消息。注意,运行时长度的数组,如f和g依赖于运行时值n和m,是GCC扩展,在标准C++中无效。在运行代码或编译时,是否会出错?请至少包括错误信息的第一部分。即使您不知道如何重新使用。d it,它包含有价值的信息,也应该包含在问题中。当我们在做这件事时,除非你需要,否则不要使用globals,@Angew错误代码太长了。有什么方法可以让它只在你点击它时显示吗?类似于[扰流板,点击显示]在其他论坛上。兼容性和性能都不是我想要的,因为这是一个简单的赋值。要解决这个问题,请不要声明已经在使用的名称。或者,不要使用include包含所有已知的头,也不要使用namespace std;@Algird将这些头的全部内容拉入全局名称空间asPreidžius实际上,无论是使用名称空间std,还是使用名称空间std;都不是为什么声明全局y0和y1是一个问题;包含只是导致问题产生明显影响的原因。您可以愉快地使用这些取下的名称,认为一切都很好,然后包含后发现程序停止处理PO六个系统。是一个方便的工具,可以把你的命名空间规则放在测试中。但是,当然,在测试之后,它不应该被留在代码中:即使不是这个问题的原因,使用命名空间STD;应该只用于将代码拟合到演示幻灯片。没有STD::Y0。C++:没有被C++标准指定的Y0。用C++编写的代码,G++是编译器,有没有一种语言叫做G++?我不知道。@ AlpKAAN35 GCC使用自己的C++语言,称为GNU++。实际上,所有编译器至少都有自己的方言。你可以问G+使用标准C++,比如-STD= C++ 17 -学究-墙。a我从来不知道!添加到研究主题中。@alpkaan35-bits/stdc++.h的使用对我来说虽然是新的,但在最近几天,自从我开始我的堆栈溢出活动以来,已经出现了很多。这是一个备受争议的主题!请看这里:
‘int y0’ redeclared as different kind of symbol
note: previous declaration ‘double y0(double)’
‘int y1’ redeclared as different kind of symbol
note: previous declaration ‘double y1(double)’
ISO C++ forbids variable length array 'f' [-Wvla]
ISO C++ forbids variable length array 'g' [-Wvla]
#include <iostream>

int main()
{
    using std::cin;
    using std::cout;
    using std::endl;
    int n, m;// , a, b; a and b are never used
    int x0, x1, y0, y1; // Declare them as local variables to avoid clash with ::y0() function
    //  freopen("seri3.gir","r",stdin);
    //  freopen("seri3.cik","w",stdout);
    cin >> n >> m;
    cin >> x0 >> x1 >> y0 >> y1;
    x0--, x1--, y0--, y1--;
    //  int f[n][m], g[n][m]; // Run-time sized arrays are g++ - not c++ !!!
    int f[10][10], g[10][10];
    if (n > 10 || m > 10)
        cout << "Array to big!" << endl;
    else for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> f[i][j];
            if ((j > y0 || j < y1) && (i > x0 || i < x1)) {
                g[j][i] = f[j][i];
                f[j][i] = 0;
                cout << g[j][i] << endl;
            }
        }
    }
}