Lebih
Apa 'undeclared identifier' kesalahan dan bagaimana cara memperbaikinya?
Apa yang undeclared identifier kesalahan? Apa penyebab dan bagaimana cara memperbaikinya?
Contoh kesalahan teks:
- Untuk Visual Studio compiler:
kesalahan C2065: 'cout' : undeclared identifier
- Untuk GCC compiler:
'cout' dideklarasikan (pertama digunakan dalam fungsi ini)
46
11
Mereka paling sering datang dari lupa untuk menyertakan header file yang berisi deklarasi fungsi, misalnya, program ini akan memberikan 'undeclared identifier' kesalahan:
Hilang header
Mempertimbangkan situasi yang sama dalam percakapan. Bayangkan teman anda mengatakan kepada anda, "Bob akan datang untuk makan malam," dan anda tidak tahu siapa Bob. Anda're akan menjadi bingung, kan? Teman anda harus berkata, "saya memiliki rekan kerja yang disebut Bob. Bob datang untuk makan malam." Sekarang Bob telah dinyatakan dan anda tahu siapa teman anda berbicara tentang.
Compiler memancarkan 'undeclared identifier' galat ketika anda mencoba untuk menggunakan beberapa identifier (apa yang akan menjadi nama dari sebuah fungsi, variabel, kelas, dll.) dan compiler belum melihat sebuah deklarasi untuk itu. Artinya, compiler tidak tahu apa yang anda maksud karena itu sudah't melihat itu sebelumnya.
Jika anda mendapatkan kesalahan seperti itu di C atau C++, itu berarti bahwa anda belum't memberitahu compiler tentang hal yang anda mencoba untuk menggunakan. Deklarasi yang sering ditemukan dalam file header, jadi itu mungkin berarti bahwa anda belum't termasuk header yang sesuai. Tentu saja, itu mungkin bahwa anda hanya ingin't diingat untuk menyatakan entitas pada semua.
Beberapa kompiler memberikan kesalahan yang lebih spesifik tergantung pada konteks. Misalnya, mencoba untuk mengkompilasi
X x;
mana jenisX
belum dinyatakan dengan dentang akan memberitahu anda "tidak diketahui jenis namaX
". Ini adalah jauh lebih berguna karena anda tahu itu's mencoba untuk menafsirkanX
sebagai jenis. Namun, jika anda memilikiint x = y;
, di manay
belum dinyatakan, itu akan memberitahu anda "penggunaan undeclared identifiery
" karena ada beberapa ambiguitas tentang apa sebenarnyay
mungkin mewakili.Aku punya masalah yang sama dengan kelas kustom, yang didefinisikan dalam sebuah namespace. Saya mencoba untuk menggunakan kelas tanpa namespace, menyebabkan kesalahan kompilator "identifier "MyClass" adalah tidak terdefinisi". Menambahkan
atau menggunakan class seperti
memecahkan masalah.
Dalam C dan C++ semua nama harus dideklarasikan sebelum digunakan. Jika anda mencoba untuk menggunakan nama variabel atau fungsi yang belum't telah menyatakan anda akan mendapatkan sebuah "undeclared identifier" kesalahan.
Namun, fungsi ini adalah sebuah kasus khusus dalam C (dan di C saja) dalam bahwa anda don't harus menyatakan mereka terlebih dahulu. C compiler akan menganggap fungsi yang ada dengan jumlah dan tipe argumen seperti dalam panggilan. Jika fungsi sebenarnya definisi tidak sesuai dengan yang anda akan mendapatkan kesalahan lain. Ini kasus khusus untuk fungsi-fungsi yang tidak ada di C++.
Anda memperbaiki ini jenis kesalahan dengan memastikan bahwa fungsi-fungsi dan variabel yang dideklarasikan sebelum digunakan. Dalam kasus
printf
anda harus menyertakan file header<stdio.h>
(atau<cstdio>
di C++).Untuk fungsi standar, saya sarankan anda memeriksa misalnya ini situs referensi, dan mencari fungsi yang ingin anda gunakan. Dokumentasi untuk masing-masing fungsi memberitahu anda apa yang header file yang anda butuhkan.
Kesalahan ini meassages
berarti bahwa anda menggunakan nama
printf
tapi compiler tidak melihat di mana nama itu dinyatakan dan dengan demikian tidak tahu apa artinya.Apapun nama yang digunakan dalam program harus dideklarasikan sebelum menggunakan. Compiler harus tahu apa nama warungnya.
Dalam kasus ini penyusun tidak melihat deklarasi nama
printf
. Seperti yang kita tahu (tapi tidak compiler) adalah nama dari standar C function yang dideklarasikan dalam header<stdio.h>
di C atau di header<cstdio>
dalam C++ dan ditempatkan dalam standar (std::
) dan global (::
) (tidak selalu) ruang nama.Jadi sebelum menggunakan fungsi ini kita harus memberikan nama deklarasi untuk compiler termasuk header yang sesuai.
Misalnya C:
C++:
Kadang-kadang alasan dari kesalahan seperti itu adalah sederhana typo. Misalnya let's asumsikan bahwa anda didefinisikan fungsi
PrintHello
tapi di kantong anda membuat kesalahan ketik dan bukan
PrintHello
yang anda ketikprintHello
dengan huruf 'p'.Dalam hal ini kompiler akan mengeluarkan pesan kesalahan karena tidak melihat deklarasi nama
printHello
.PrintHello
danprintHello
adalah dua nama yang berbeda satu dari yang dinyatakan dan lainnya tidak dinyatakan tetapi digunakan dalam tubuh utamaYang lain mungkin situasi: mengakses induk (kelas template) anggota di kelas template.
Memperbaiki metode: menggunakan induk anggota kelas dengan nama lengkap (dengan awalan
ini->
atauparentClassName::
nama anggota).lihat: https://stackoverflow.com/questions/6592512/templates-parent-class-member-variables-not-visible-in-inherited-class?noredirect=1&lq=1
Setiap variabel dideklarasikan dalam c error datang karena compiler tidak dapat menemukannya dalam proyek. Satu dapat mencakup eksternal (header) file perpustakaan di mana variabel yang didefinisikan. Oleh karena itu dalam pertanyaan anda, anda membutuhkan
<stdio.h>
, yang merupakan standar input output file, yang menggambarkan printf(), fungsi.Menurut dokumentasi, deklarasi fprintf() adalah di yaitu anda harus seperti itu, sebelum menggunakan fungsi.
Hal ini seperti Menggunakan fungsi tanpa menyatakan hal itu. <stdio.h> header file yang akan berisi fungsi printf(). Menyertakan header file dalam program ini adalah solusi untuk itu. Beberapa fungsi ditetapkan pengguna juga dapat melalui kesalahan ketika tidak dideklarasikan sebelum digunakan. Jika hal ini digunakan secara global tidak ada probs.
Sebagian besar waktu, jika anda sangat yakin anda impor perpustakaan dalam pertanyaan, Visual Studio akan memandu anda dengan IntelliSense.
Berikut adalah apa yang bekerja untuk saya:
Pastikan bahwa
#include "stdafx.h"
dinyatakan sebagai yang pertama, yang adalah, di atas semua termasuk.C++ identifier adalah nama yang digunakan untuk mengidentifikasi variabel, fungsi, kelas, modul, atau lainnya yang ditetapkan pengguna barang. Dalam C++ semua nama harus dideklarasikan sebelum digunakan. Jika anda mencoba untuk menggunakan nama seperti yang sudah't telah menyatakan anda akan mendapatkan sebuah "undeclared identifier" kompilasi kesalahan.
Menurut dokumentasi, pernyataan printf() adalah di cstdio yaitu anda harus seperti itu, sebelum menggunakan fungsi.
Periksa jika anda mengimpor paket yang sama pada anda .m dan di .jam Contoh yang diberikan: saya punya masalah dengan metode init dan itu disebabkan oleh yang hilang "#import <UIKit/UIKit.h>" di .m file