Ошибка компилятора c2065

Ketler, 1-й подводный камень для успешной компиляции в 2010 студии состоит в том что в ваше программе использован старый стиль заголовков

Цитата
Сообщение от Ketler
Посмотреть сообщение

#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>

Как сказал
gooseim, вам следует осуществить такую запись для подключения хедеров

C++
1
2
3
#include <iostream>
#include <cstdlib>
#include <iomanip>

Но также в вашем коде операторы ввода вывода идут без std::!
std::cout<< и std::cin>> такая запись уже не вызовет ошибок при компиляции в 2010 студии

Добавлено через 4 минуты

Цитата
Сообщение от Ketler
Посмотреть сообщение

void main()

— это тоже не кашерно для С++, странно что никто ваше внимание не это не обратил!
Ниже подправленный код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;//Можно исключить, но можно и с єтой строкой
 
struct CH
{
  int k;
  CH *ptr;
};
 
CH * aadd_stek( CH *);
CH * del_stek ( CH *);
int main()
{
  CH *beg=NULL;
  char c;
  while(1)
  {
    std::cout << "\n\n1. Добавление элемента в cтек\n";
    std::cout << "2. Выборка элемента из стека\n";
    std::cout << "3. Выход из программы\n";
    std::cout << "Ваш выбор:";
    std::cin >> c;
    switch(c)
    {
      case '1':
        beg=aadd_stek(beg);
        break;
      case '2':
        beg=del_stek(beg);
        break;
      case '3':
        return;
     }
   }
  return 0;
}
 
CH * aadd_stek( CH *first)
{
  CH *r;
  int m;
  std::cout << "Введите целое число=";
  std::cin >> m;
  // выделяем динамическую память
  r = new (CH);
  if ( r == NULL)
  {
    cerr << "Ошибка выделения динамической памяти\n";
    exit(1);
  }
  // заносим в дин. память введенное число
  // и адрес вершины стека (предыдущего эл-та)
  r->k = m;
  r->ptr = first;
 
  // теперь r стал вершиной стека
  // поэтому возвращаем его из функции
  // если выполнить first = r
  // то тогда можно возвратить first
 
  return r;
}
 
CH * del_stek ( CH *first)
{
  CH *r;
  if (first == NULL)
    std::cout << "Стек пуст. Выбирать нечего.\n";
  else
  {
    r=first;
    first = first->ptr;  // перешли на предшествующий элемент
    std::cout << "Из стека выбран эл-т = " << r->k << endl;
    delete r;
  }
  return first;
}

I ran across this error after just having installed vs 2010 and just trying to get a nearly identical program to work.

I’ve done vanilla C coding on unix-style boxes before, decided I’d play with this a bit myself.

The first program I tried was:

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Hello World!";
    return 0;
}

The big thing to notice here… if you’ve EVER done any C coding,

int _tmain(int argc, _TCHAR* argv[])

Looks weird. it should be:

int main( int argc, char ** argv )

In my case I just changed the program to:

#include <iostream>
using namespace std;

int main()
{
     cout << "Hello world from  VS 2010!\n";
     return 0;
}

And it worked fine.

Note: Use CTRL + F5 so that the console window sticks around so you can see the results.

Эти сообщения об ошибках

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

означает, что вы используете имя printf, но компилятор не видит, где было объявлено имя и, соответственно, не знает, что это значит.

Любое имя, используемое в программе, должно быть объявлено до его использования. Компилятор должен знать, что означает это имя.

В этом конкретном случае компилятор не видит объявления с именем printf. Как мы знаем (но не компилятор), это имя стандартной функции C, объявленной в заголовке <stdio.h> в C или в заголовке <cstdio> в С++, и помещается в стандартную (std::) и глобальную (::) ( не обязательно) пространства имен.

Поэтому перед использованием этой функции мы должны предоставить объявление своего имени компилятору, включив соответствующие заголовки.

Например
С

#include <stdio.h>

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

С++:

#include <cstdio>

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

Иногда причиной такой ошибки является простая опечатка. Например, допустим, что вы определили функцию PrintHello

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

но в основном вы сделали опечатку, а вместо PrintHello вы набрали PrintHello строчной буквой «p».

#include <cstdio>

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

int main()
{
   printHello();
}

В этом случае компилятор выдает такую ​​ошибку, потому что не видит объявления имени PrintHello. PrintHello и PrintHello — это два разных имени, одно из которых было объявлено, а другое не было объявлено, а использовано в теле основного

Здравствуйте. Я новичок в C++. На работе ковыряюсь в чужом проекте. В файле есть два метода. В одном из них используется класс. Я хочу использовать этот класс в другом методе, на что компилятор выдает error C2065: undeclared identifier. Вот схематичное описание ситуации:

temlate<class Base>
class CLASS
{
   void visit()
   {
      // bla bla bla
      Device d;  // 'Device' : undeclared identifier
      //bla bla bla
   }
   void Draw()
   {
      // bla bla bla
      Device d;  // It's OK
      //bla bla bla
   }
};

Не могу понять почему это так. Пробовал менять методы местами, но ошибка остается, причем именно на ту же самую строку (в методе visit). Подскажите пожалуйста как это исправить. Заранее спасибо!

UPD:
Если закомментировать использование Device в методе visit, то все отлично работает (проект рабочий, я его просто допиливаю):

class CLASS
{
   void visit()
   {
      // bla bla bla
      // Device d;  // now it's OK
      //bla bla bla
   }
   void Draw()
   {
      // bla bla bla
      Device d;  // It's OK
      //bla bla bla
   }
};

I have got a problem but I don’t know why.
I’m fallowing this to learn DirectX.
I used this to configure the solution.

This is my code:

Header:

#include <d3d11.h>
#include <d3dx11.h>
#include <d3d10.h>
#include <d3dx10.h>
#include <dxgi.h>
#include <Windows.h>
#include <windowsx.h>

#pragma comment (lib, "d3d11.lib")
#pragma comment (lib, "d3dx11.lib")
#pragma comment (lib, "d3dx10.lib")

    class HelloWorld
    {
    private: 
        IDXGISwapChain* swapchain;             
        ID3D11Device* dev;                     
        ID3D11DeviceContext* devcon; 

        LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

    public:
        void InitD3D(HWND hWnd);    
        void CleanD3D(void);  
        int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);
    };
}

and cpp:

#include "HelloWorld.h"

void InitD3D(HWND hWnd)
{
    DXGI_SWAP_CHAIN_DESC scd;

    ZeroMemory(&scd, sizeof(DXGI_SWAP_CHAIN_DESC));

    scd.BufferCount = 1;
    scd.BufferDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
    scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    scd.OutputWindow = hWnd;
    scd.SampleDesc.Count = 4;
    scd.Windowed = TRUE;

    D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE,
        NULL, NULL, NULL, NULL, 
        D3D11_SDK_VERSION, &scd, &swapchain, &dev, NULL, &devcon);
}

void CleanD3D(void)
{
    swapchain->Release();
    dev->Release();
    devcon->Release();
}

LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
    case WM_DESTROY: 
        {
            PostQuitMessage(0);
            return 0;
        }break;
    }

    return DefWindowProc(hWnd, message, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hWnd;
    WNDCLASSEX wc;

    ZeroMemory(&wc, sizeof(WNDCLASSEX));

    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
    wc.lpszClassName = "WindowClass1";

    RegisterClassEx(&wc);

    RECT wr = {0, 0, 400, 400};
    AdjustWindowRect(&wr, WS_OVERLAPPEDWINDOW, FALSE);

    hWnd = CreateWindowEx(NULL,
        "WindowClass1",
        "First windowed program",
        WS_OVERLAPPEDWINDOW,
        300,
        300,
        wr.right - wr.left,
        wr.bottom - wr.top,
        NULL,
        NULL,
        hInstance,
        NULL);

    ShowWindow(hWnd, nCmdShow);

    MSG msg = {0};

    while(true)
    {
        if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);

            if(msg.message == WM_QUIT)
            {
                break;
            }
        }
        else
        {

        }
    }

    return msg.wParam;
}

But during compilation I have got a C2065 error on : swapchain, dev and devcon.

I have tried several thing but nothing worked.

If somebody could help my, it will be appreciate !

PuK

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Ошибка компилятора c2061
  • Ошибка кондиционера e13
  • Ошибка клапана эспрессо блютек
  • Ошибка кия р0131
  • Ошибка компилятора c2040

  • Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: