01/10/2018, 14:32

Sửa lỗi was not declared in this scope (C++)

Em vừa chuyển sang học C++ và viết thử một đoạn chương trình thì bị lỗi này mặc dù đã khai báo biến rồi. Mong mọi người giải thích giúp em lý do và cách khắc phục ạ.
Em cám ơn.

#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
#define maxN 50
#define inf 32000
int n,nn,k,p,t[maxN],d[maxN],tt[maxN],u,v,mind;
vector<int> M[maxN];

void bfs(int s){
    for(int i=1;i<=n;i++)
        d[i]=inf;
    queue<int> q; //Khai báo queue q
    q.push(s); d[s]=0;
    while(!q.empty()){
        u=q.front(); //u là phần tử đầu queue
        q.pop();    //xóa phần tử đầu queue
        for(int i=0;i<M[u].size();i++){
            v=M[u][i]; //v là đỉnh kề u
            if (d[v]==inf){ //nếu v chưa thăm
                q.push(v);
                d[v]=d[u]+1;
            }
        }
    }
}

int main ()
{
    freopen("robot.inp","r",stdin);
    freopen("roboot.out","w",stdout);
    scanf("%d %d %d %d",&n,&nn,&k,&p);
    for(int i=1;i<=p;i++)
    {
        scanf("d%",&tt[i]);
    }
    for(int i=1;i<=nn;i++)
    {
        scanf("%d %d %d",&u,&v,&k);
        if (k=1)
        {
            M[u].push_back(v);
            M[v].push_back(u);
        }
    }
    for (int j=1;j<=p;j++)
    {
        bfs(tt[j]);
        for (int i=1;i<=n;i++)
        {
            t[i]=0;
            T[i]=t[i]+d[i];
        }
    }
    for (int i=1;i<=n;i++)
    {
        if (d[i]>inf && D[i]<mind)
            mind=d[i];
    }
    printf("%d",mind);
    return 0;
}

*grab popcorn* viết 16:36 ngày 01/10/2018

viết thử một đoạn chương trình thì bị lỗi này mặc dù đã khai báo biến rồi.

:3 Từ pascal sang C++ đúng không?
Vậy thì C++ phân biệt t và T nhé.

HK boy viết 16:44 ngày 01/10/2018

Thứ nhất, đúng như drgnz nói, có vẻ như bạn đang bị lẫn lộn Pascal với C++ (code của bạn có >=2 chỗ sai như nhau: T với t, D với d), Pascal không phân biệt hoa thường nhưng C++ thì có. Bạn nên phân biệt rõ sự khác nhau này.

[spoiler]Code viết Pascal mà cứ t với T lẫn lộn rất xấu, ngày xưa không có ai dạy bạn viết code sạch hơn sao?[/spoiler]

Thứ 2, cả đoạn này có vấn đề

        for (int i=1;i<=n;i++)
        {
            t[i]=0;
            T[i]=t[i]+d[i];
        }

Hình như phải là

t[j] = 0
for (i ...) t[j] += d[i];

chứ nhỉ?

Thứ 3, góp ý về cách code: Đã dùng C++ thì code cin cout luôn chứ scanf printf làm gì, đừng code kiểu nửa C nửa C++ như thế, xấu lắm.

Bing viết 16:40 ngày 01/10/2018

Thứ 3, góp ý về cách code: Đã dùng C++ thì code cin cout luôn chứ scanf printf làm gì, đừng code kiểu nửa C nửa C++ như thế, xấu lắm.

Tks bạn, mình vừa chuyển từ Pascal sang nên chưa nhuyễn lắm. Còn phần dùng scanf printf là do thầy mình chỉ và bảo là nó đọc file nhanh hơn @@~

HK boy viết 16:38 ngày 01/10/2018

Có vẻ như bạn ở team code competitive programming…

Nên dùng printf scanf trong những trường hợp cần thiết thôi. Còn lại thì đừng dùng cho code đỡ xấu.

rogp10 viết 16:44 ngày 01/10/2018

desync với stdio là xong vẫn dùng cin cout được.

Bing viết 16:36 ngày 01/10/2018

Vâng, tks mọi người ạ, có gì mình sẽ xem lúc nào cần dùng với không cần :v

Bài liên quan
0