Ketler, 1-й подводный камень для успешной компиляции в 2010 студии состоит в том что в ваше программе использован старый стиль заголовков
Сообщение от Ketler
#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>
Как сказал
gooseim, вам следует осуществить такую запись для подключения хедеров
| C++ | ||
|
Но также в вашем коде операторы ввода вывода идут без std::!
std::cout<< и std::cin>> такая запись уже не вызовет ошибок при компиляции в 2010 студии
Добавлено через 4 минуты
Сообщение от Ketler
void main()
— это тоже не кашерно для С++, странно что никто ваше внимание не это не обратил!
Ниже подправленный код
| C++ | ||
|
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

