Часть 2. Я начинающий, подскажите как...(Все вопросы начинающих!!!)
ListBox1->Columns=3;
каким образом записать строку в второй и третий столбцы?
Дык, getch() в <stdio.h> декларирован.
2. вместо main(void), создавать WinMain(HINSTANCE, HINSTANCE, LPTSTR, int).
Вообще, создайте заготовку Win32 Project. И перенесите туда код.
LetterList = (cfunc)GetProcAddress((HMODULE)hLib, "LetterList");
не возвращают адрес функций
void Ex(String^ str);
Видимо надо явно выделить память, но как, если у OleDbDataReader нет конструктора. Как быть в таких случаях?
void Ex(String^ str);
Как я понял, нужно переданное значение изменить и вернуть обратно изменённое. Если да, то делаем так:
void method(String ^%s) // % <- вот что нужно!
{
s = "two";
}
int main(array<System::String ^> ^args)
{
String ^str = "one";
Console::WriteLine(str);
method(str);
Console::WriteLine(str);
return 0;
}
Подробнее смотрим в MSDN % tracking reference [C++]
при
HMODULE myModule = LoadLibraryA("mdll.dll");
...
библиотека загружается отлично, но этого не происходит при LoadLibrary((LPCWSTR)"mdll.dll"); и при HMODULE myModule = LoadLibraryW("mdll.dll"); почему?
ЗЫ немогу найти русскоязычную инфу по программированию win32, прошу помоч в поиске.
при
HMODULE myModule = LoadLibraryA("mdll.dll");
...
библиотека загружается отлично, но этого не происходит при LoadLibrary((LPCWSTR)"mdll.dll"); и при HMODULE myModule = LoadLibraryW("mdll.dll"); почему?
ЗЫ немогу найти русскоязычную инфу по программированию win32, прошу помоч в поиске.
Ну, браток. Гугль рулит во всех отношениях. MSDN по-русски.
Туда вопросы, там ответы... /(с) День Радио
double d = (double)a;
Сойдет?
а ниче не треснет?
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
char buf[32];
int a = 10;
double b = (double)a;
cout << a << endl;
cout << b << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
он мне два раза выводит 10
а я бы хотел чтобы 10 и 10,0
double d = (double)i;
cout.precision(20);
cout<<i<<endl;
cout<<fixed<<d<<endl;
double d = (double)a;
Сойдет?[/QUOTE]Ууу, все ж не так просто! ;) :D
{
enum {value = v};
};
template <class H, class T> struct Typelist
{
H head;
T tail;
};
struct NullType;
#define TYPELIST1(T1) Typelist<T1, NullType>
#define TYPELIST2(T1, T2) Typelist<T1, TYPELIST1(T2) >
#define TYPELIST3(T1, T2, T3) Typelist<T1, TYPELIST2(T2, T3) >
#define TYPELIST4(T1, T2, T3, T4) Typelist<T1, TYPELIST3(T2, T3, T4) >
namespace TL
{
//длина списка типов
template <class TList> struct Length;
template <> struct Length<NullType>
{
enum {value = 0};
};
template <class T, class U> struct Length<Typelist<T, U> >
{
enum {value = 1 + Length<U>::value};
};
//поиск типа в списке типов
template <class TList, class TSearch> struct IndexOf;
template <class TSearch> struct IndexOf<NullType, TSearch>
{
enum {value = -1};
};
template <class TSearch, class Tail> struct IndexOf< Typelist<TSearch, Tail>, TSearch >
{
enum {value = 0};
};
template <class Head, class Tail, class TSearch> struct IndexOf< Typelist<Head, Tail>, TSearch >
{
private:
enum {temp = 1 + IndexOf<Tail, TSearch>::value};
public:
enum {value = temp == -1 ? -1 : 1 + temp};
};
};
template <class T> struct TypeTraits
{
private:
//распознавание указателей
template <class U> struct PointerTraits
{
enum {result = false};
typedef NullType PointerType;
};
template <class U> struct PointerTraits<U*>
{
enum {result = true};
typedef U PointerType;
};
//распознавание основных типов
typedef TYPELIST4(signed char, short, int, long) SignedInts;
typedef TYPELIST4(unsigned char, unsigned short, unsigned, unsigned long) UnsignedInts;
typedef TYPELIST3(float, double, long double) Floats;
typedef TYPELIST3(char, wchar_t, bool) OtherInts;
enum {isSignedInt = TL::IndexOf<SignedInts, T>::value >= 0};
enum {isUnsignedInt = TL::IndexOf<UnsignedInts, T>::value >= 0};
enum {isFloat = TL::IndexOf<Floats, T>::value >= 0};
enum {isOtherInt = TL::IndexOf<OtherInts, T>::value >= 0};
public:
enum {isPointer = PointerTraits<T>::result};
enum {isStandart = isSignedInt || isUnsignedInt || isFloat || isOtherInt};
};
enum AlgoCasting{ STATIC, DYNAMIC, REINTERPRET };
template <class To, class From>
To universal_cast(From from, Int2Type<STATIC>)
{
return static_cast<To>(from);
}
template <class To, class From>
To universal_cast(From from, Int2Type<DYNAMIC>)
{
return dynamic_cast<To>(from);
}
template <class To, class From>
To universal_cast(From from, Int2Type<REINTERPRET>)
{
return reinterpret_cast<To>(from);
}
template <class To, class From>
To universal_cast(From from)
{
enum {Algo = (TypeTraits<To>::isPointer && TypeTraits<From>::isPointer) ?
DYNAMIC :
( (TypeTraits<To>::isStandart && TypeTraits<From>::isStandart) ?
STATIC :
REINTERPRET
)
};
return universal_cast<To>(from, Int2Type<Algo>() );
}
//использование
int a = 3;
double d = universal_cast<double>(a);
cout << d;
ЗЫ Не читайте, дети, Александреску на ночь!!!
{
private:
char * company;
...
public:
Stock();
Stock(const Stock &);
Stock & operator=(const Stock &);
~Stock();
...
};
#endif
{
len=st.len;
//delete [] company; суть вопроса!!!!!!!
company=new char[len+1];
...
}
Stock & Stock::operator =(const Stock & st)
{
if(this==&st) return *this;
delete [] company;
len=st.len;
company=new char[len+1];
...
return * this;
}
подскажыте пожалуйсто почему не могу очисчять память с помочью delete [] в конструкторе копирования???
Приведите тело обычного конструктора данного класса (который не конструктор копирования), тот, который объявлен у вас в классе:
Stock();
{
company=new char[8];
strcpy(company,"no name");
shares=0;
len=0;
share_val=0.0;
total_val=0.0;
}
Stock::Stock(const char *str, int n, double pr)
{
len=strlen(str);
company=new char[len+1];
strcpy(company, str);
shares=n;
share_val=pr;
set_tot();
}
вобщем кому интересно то суть в том что ето конструктор и я питаюсь какби удалить указател который пока ни на что не указывает, вобщем выполняэтся только иницыализацыя а уже что то удаляю поетому ы ошыбка
вобщем кому интересно то суть в том что ето конструктор и я питаюсь какби удалить указател который пока ни на что не указывает, вобщем выполняэтся только иницыализацыя а уже что то удаляю поетому ы ошыбка
Хорошо что разобрались. :)
Я же должен сказать что тоже ошибся - попросил у вас определения других конструкторов, хотя они здесь вовсе ни при чем. Понял это только после того как свой предыдущий пост написал. Хотел об этом написать, и о том в чем проблема была (примерно то что вы написали)- но вы опередили.
У меня возникла проблема - при запуске борланда Windows 7 пишет, что не поддерживается полноэкранный режим для Borland C++ 3.1. Помимо того, что не удобно, виснет графический режим. Подскажите, что можно сделать?
У меня возникла проблема - при запуске борланда Windows 7 пишет, что не поддерживается полноэкранный режим для Borland C++ 3.1. Помимо того, что не удобно, виснет графический режим. Подскажите, что можно сделать?
Не мучить старушку и поставить, например, RAD 2010...
UPD: ну или если нужна именно эта версия, то попробуйте запустить ее в XP Mode (только прежде чем радостно бежать скачивать все необходимое для XP Mode, надо проверить поддерживает ли процессор виртуализацию ... у меня на ноуте, к слову, не поддерживает, хотя вроде вполне нормальный проц стоит)
В Убунте через Вайн запускай. Шутка.
Можешь еще какой-нибудь DOSBox попробовать.
Но лучше всего работать с какой-нибудь современной IDE.
UPD: ну или если нужна именно эта версия, то попробуйте запустить ее в XP Mode
Чесно говоря, какая версия - разницы нет) Просто так привычнее. Спасибо за советы, поставлю Builder 2010.
1) Если используется освещение, то оно исчезает при изменении размеров окна и больше не восстанавливается, предотвратить это можно отменой события DeviceResizing, что отрицательно сказывается на качестве картинки, сам код:
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
namespace DXtriangle3DLight
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
}
private Device device = null;
float angle = 0;
public void InitializeGraphics()
{
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed = true; //приложение оконное
presentParams.SwapEffect = SwapEffect.Discard; //видеокарта сама определяет режим работы с буфером
device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
device.DeviceResizing+=new CancelEventHandler(this.CanselResize);
}
private void CanselResize(object sender, CancelEventArgs e)
{
//e.Cancel = true;
}
private void SetupCamera()
{
device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1f, 100f);
device.Transform.View = Matrix.LookAtLH(new Vector3(0, 0, 5), new Vector3(0, 0, 0), new Vector3(0, 1, 0));
//device.RenderState.Lighting = false;
device.RenderState.CullMode = Cull.None;
device.RenderState.NormalizeNormals = true;
device.Transform.World = Matrix.RotationAxis(new Vector3(angle / ((float)Math.PI * 2), angle / ((float)Math.PI * 4), angle / ((float)Math.PI * 6)), angle / (float)Math.PI);
angle += 0.1f;
}
private void SetupLights()
{
device.Lights[0].Type = LightType.Point;
device.Lights[0].Position = new Vector3(0, 0, 0);
device.Lights[0].Diffuse = Color.White;
device.Lights[0].Attenuation0 = 0.2f;
device.Lights[0].Range = 10000f;
device.Lights[0].Enabled = true;
}
private CustomVertex.PositionNormalColored[] TriangleN()
{
CustomVertex.PositionNormalColored[] verts = new CustomVertex.PositionNormalColored[3];
verts[0].Position = new Vector3(0f, 1f, 1f);
verts[0].Normal = new Vector3(0f, 0f, -1f);
verts[0].Color = Color.Orange.ToArgb();
verts[1].Position = new Vector3(-1f, -1f, 1f);
verts[1].Normal = new Vector3(0f, 0f, -1f);
verts[1].Color = Color.Purple.ToArgb();
verts[2].Position = new Vector3(1f, -1f, 1f);
verts[2].Normal = new Vector3(0f, 0f, -1f);
verts[2].Color = Color.Green.ToArgb();
return verts;
}
protected override void OnPaint(PaintEventArgs e)
{
device.Clear(ClearFlags.Target, Color.CadetBlue, 1f, 0);
SetupCamera();
SetupLights();
device.BeginScene();
device.VertexFormat = CustomVertex.PositionNormalColored.Format;
device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, TriangleN());
device.EndScene();
device.Present();
this.Invalidate();
}
}
}
2) Нормально ли, что при установке высоты окна больше ширины все рисуемые фигуры пропадают (это относится к любому рисованию с использованием мировых координат, не только с освещением).
device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, (float)this.Width/this.Height, 1f, 100f);
иначе при делении получался 0. Но освещение по прежнему исчезает.
Такая ситуация мне надо сделать условие конца ввода.
т.е я считываю число. если я нажму enter тобишь ничего не введу то он должен присвоить значение по умолчанию. я знаю что это достаточно просто. но что-то у меня никак не выходит.
Такая ситуация мне надо сделать условие конца ввода.
т.е я считываю число. если я нажму enter тобишь ничего не введу то он должен присвоить значение по умолчанию.
Как считываешь-то, загадочный ты наш?
cin >> value;
еще я пробовал так:
if (value=='\n') //или '\0'
{
cout << "Вы ничего не ввели.";
value = 1;
}
string str;
getline(cin, str);
istringstream iss(str);
if(!(iss >> value))
{
iss.clear();
value = 1;
}
cout << value;
string str;
getline(cin, str);
istringstream iss(str);
if(!(iss >> value))
{
iss.clear();
value = 1;
}
cout << value;
На самом деле я думал можно это сделать как-то проще(не на ваш счет).
Но и на том спасибо огроменное! :D
{
int numenator = 0;
string str;
cout << toRus("Введите числитель: ");
getline(cin, str);
istringstream iss_1(str);
if(!(iss_1 >> numenator))
{
iss_1.clear();
cout << toRus("Вы не ввели значение числителя. \nЕму будет присвоено значение по умолчанию.");
numenator = 1;
}
//------------------------------------------------------------------------------------------//
int denominator = 0;
cout << toRus("Введите знаменатель: ");
getline(cin, str);
istringstream iss_2(str);
if(!(iss_2 >> denominator))
{
iss_2.clear();
cout << toRus("Вы не ввели значение знаменателя. \nЕму будет присвоено значение по умолчанию.");
denominator = 1;
}
//------------------------------------------------------------------------------------------//
reduction(numenator, denominator);
}
он мне выдает ошибку:
2 строка в этом коде, D:\Dev-Cpp\ïðîãè\Rational\rational_main.cpp new types may not be defined in a return type
2 строка в этом коде, D:\Dev-Cpp\ïðîãè\Rational\rational_main.cpp return type specification for constructor invalid
мне кажется но скорее всего это не так - в конструкторе нельзя создать левую переменную. что такое новые типы и возвращаемые типы :confused: ?
Чуть проще вариант:
int value = 1;
getline( cin, str );
if (!str.empty())
value = atoi( str.c_str() );
От чего же. Я могу. 10 баллов нарушения - 5 за то что правила форума не читаешь, 5 - за нарушение собственно правил.
Всё просто:
1. Поле - это какие-либо данные, которые принадлежат классу:
{
public int Count;
}
2. Свойство - это методы (функции), которые "маскируются" под данные:
{
private int count;
public int Count
{
get { return count + 1; }
set { count = value - 1; }
}
}
}
Их использование в коде выглядит одинаково, но в случае свойств вызываются функции get и set (что позволяет например проводить дополнительные проверки, либо изменять данные), а в случае полей вы работаете с самой переменной.
p.Count = 3; // здесь будет вызван метод set {}
int x = p.Count; // здесь будет вызван метод get {}
var f = new TestField();
f.Count = 3; // а здесь работа происходит непосредственно с переменной