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)
Mengomentari pertanyaan (1)

Mereka paling sering datang dari lupa untuk menyertakan header file yang berisi deklarasi fungsi, misalnya, program ini akan memberikan 'undeclared identifier' kesalahan:

Hilang header


int main() {
    std::cout 
Komentar (4)

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 jenis X belum dinyatakan dengan dentang akan memberitahu anda "tidak diketahui jenis nama X". Ini adalah jauh lebih berguna karena anda tahu itu's mencoba untuk menafsirkan X sebagai jenis. Namun, jika anda memiliki int x = y;, di mana y belum dinyatakan, itu akan memberitahu anda "penggunaan undeclared identifier y" karena ada beberapa ambiguitas tentang apa sebenarnya y mungkin mewakili.

Komentar (0)

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

using namespace 

atau menggunakan class seperti

MyNamespace::MyClass myClass;

memecahkan masalah.

Komentar (0)

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.

Komentar (0)

Kesalahan ini meassages

1.For the Visual Studio compiler: error C2065: 'printf' : undeclared identifier
2.For the GCC compiler: `printf' undeclared (first use in this function)

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:

#include 

int main( void )
{
   printf( "Hello World\n" );
}

C++:

#include 

int main()
{
   std::printf( "Hello World\n" );
   // or printf( "Hello World\n" );
   // or ::printf( "Hello World\n" );
}

Kadang-kadang alasan dari kesalahan seperti itu adalah sederhana typo. Misalnya let's asumsikan bahwa anda didefinisikan fungsi PrintHello

void PrintHello()
{
    std::printf( "Hello World\n" );
}

tapi di kantong anda membuat kesalahan ketik dan bukan PrintHello yang anda ketik printHello dengan huruf 'p'.

#include 

void PrintHello()
{
    std::printf( "Hello World\n" );
}

int main()
{
   printHello();
}

Dalam hal ini kompiler akan mengeluarkan pesan kesalahan karena tidak melihat deklarasi nama printHello. PrintHello dan printHello adalah dua nama yang berbeda satu dari yang dinyatakan dan lainnya tidak dinyatakan tetapi digunakan dalam tubuh utama

Komentar (1)

Yang lain mungkin situasi: mengakses induk (kelas template) anggota di kelas template.

Memperbaiki metode: menggunakan induk anggota kelas dengan nama lengkap (dengan awalan ini-> atau parentClassName:: nama anggota).

lihat: https://stackoverflow.com/questions/6592512/templates-parent-class-member-variables-not-visible-in-inherited-class?noredirect=1&lq=1

Komentar (0)

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.

Komentar (1)

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.

Komentar (0)

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.

Komentar (0)

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.

Komentar (0)

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

Komentar (0)