【初心者歓迎】C/C++室 Ver.59【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2008/03/30(日) 01:50:26ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.50【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1204124447/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0002デフォルトの名無しさん
2008/03/30(日) 01:53:36|::::::`/ /-‐─-='、> ,、
`ヽ/ `>/ ) ヽ.>|_ヽ/| _,,..-‐'"´ヽ.
|/ < ´) Y--‐`''"´:::::::::::::::::/i__,,.. - 、
/| `> 、_) | ̄V::::::::: , 、::::::::::::\| ヽ、,.ノ
/::::| < l ) ./___∧::::::く�H\:::::::/|-‐'"
l__,∧ \ ,イ:;:-‐‐-、__,,.ヽ-、, >:::\|´"'' ー、'"`ヽ
/:::::ヽ、 __,>ー-‐<__フ r'´ i:::::::/| | ノ
 ̄ ̄ヽ、 ー‐-‐< !、 ゝ__,,..-<::::::\/___,,..-‐''"
`ヽr-、..,,_____,,.>フ` ̄|´ヽ. ヽ:/
く/ /| |
\/ \/
_____ ___ ____ ___ ___
/ ____/ /´ ̄| / ̄l /´ ̄/ /___/ /____/ l ̄l / ̄/ /___/ /__ \
/ / .  ̄ ̄  ̄  ̄ ̄ ___  ̄  ̄ ___ / /
\ \_l ̄/ /´ ̄ ̄ | /´ ̄ ∨ ̄ ̄/ / __/ / ̄/ / ̄/ | ̄∨ ̄/ / __/ / ̄ ̄ /
\_ / / / ̄| | / /l /| / / /___ / /_/ / | / / /___ / /\ \
/ / /__/ |_|/,_,/ |,_,/ |,_/ /___/ /____/ | __/ /___/ /_/ \ \
. / / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ \ \
 ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄
0003デフォルトの名無しさん
2008/03/30(日) 01:59:080004デフォルトの名無しさん
2008/03/30(日) 02:01:370005デフォルトの名無しさん
2008/03/30(日) 03:00:430006デフォルトの名無しさん
2008/03/30(日) 03:20:290007デフォルトの名無しさん
2008/03/30(日) 03:27:06乙
GUIアプリ作りたいけど……中々そこまで勉強が進まない。
delphiとかrubyの方がいいんでしょうかな。
0008デフォルトの名無しさん
2008/03/30(日) 03:35:17乙だけど次は54くらいに戻そうぜ もしくは60-6あたりで。
>>7
楽にやるならGUIでrubyは無い気がするが…
delphiは少し古くなってきているのでC#あたりがおすすめ
0009デフォルトの名無しさん
2008/03/30(日) 09:15:28【初心者歓迎】C/C++室 Ver.48【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1202141921/
08/02/20-08/02/27
【初心者歓迎】C/C++室 Ver.49【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1203478421/
08/02/28-08/03/14
【初心者歓迎】C/C++室 Ver.50【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1204124499/
08/03/14(3レスのみで終了)
【初心者歓迎】C/C++室 Ver.51【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1205496128/
08/02/28,08/03/14-08/03/30
【初心者歓迎】C/C++室 Ver.50【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1204124447/
スレッド移行としてはこんな流れみたいなので、前スレが Ver.51相当、今スレは Ver.52 相当と見なせば良さそうだけどね。
00101
2008/03/30(日) 09:29:03軽い気持ちで59にしてしまったばかりに、、、、
俺がこのスレの最後にまた出てきて責任をもって次はVer 53を立てろと言うよ。
0011デフォルトの名無しさん
2008/03/30(日) 10:38:160012デフォルトの名無しさん
2008/03/30(日) 10:53:170013デフォルトの名無しさん
2008/03/30(日) 12:09:590014デフォルトの名無しさん
2008/03/30(日) 14:18:20thx。そうか、delphiは古いか。
やっぱスタジオゲットしたほうがいいな。
0015デフォルトの名無しさん
2008/03/30(日) 16:27:35「operatorを使って、++x、x++をクラス型のオブジェクトに適用できるようにしました
では、前置演算子関数から後置演算子関数を呼び出すか、またはその逆にして、スマートにしたものを作れ」
という問題です
メインのプログラムで呼び出すときに
++x は x..operator++()
x++ は x..operator++(0)
と解釈されるとあります
しかし、前置関数、後置関数の区別の方法がどうにも理解できません
前置に後置を入れると、そもそも引数を受け取らない関数から、どうやって受け取る関数を実行させるのか
またはその逆がどうやったらできるのか
実際に思いついたのはこんなものです
Counter& operator++() {
Counter x = *this;
if(cnt < UINT_MAX) cnt++;
if(t != 0) {
Counter y; y = x; *this = y; }
return *this; }
関数を呼び出してないし、実際にコンパイルしてみると、左辺値が必要というエラーで失敗します
解法をおしえていただけないでしょうか
0016デフォルトの名無しさん
2008/03/30(日) 16:36:170017デフォルトの名無しさん
2008/03/30(日) 16:39:55前置インクリメントは普通に定義した上で、
こういう風に前置インクリメントを使う後置インクリメント演算子関数をクラスのメンバとして作る。
無理にメンバにする必要もないけど。
Counter operator ++(int)
{
Counter x = *this;
++*this;
return x;
}
0018デフォルトの名無しさん
2008/03/30(日) 16:58:27いや引数をどうにかしようとおもって、後置で0が入れられるなら、前置は何も入らない!とおもってやった名残です
つまり消し忘れなのです
>>17
*thisの++がoperator++()ということですかなるほど
実行できました
ありがとうございました
0019デフォルトの名無しさん
2008/03/30(日) 17:08:48例えば、以下の関数で???の部分はどのような記述になりますか。
??? getArray(){
const int ary[ ][5] = {
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 }
};
return ary;
}
また受けて側では
どのように取得すればいいのでしょうか。
0020デフォルトの名無しさん
2008/03/30(日) 17:16:24・配列を返すことはできない。
・ローカル変数のアドレスを返すことはできない。
従って、こんなもんかな。
const int (* getArray())[5]
{
static const int ary[ ][5] = {
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 },
{1, 1, 1, 1, 1 }
};
return ary;
}
int main()
{
const int (* a)[5] = getArray();
return 0;
}
尤も、これが正解かどうかは別の問題。
002119
2008/03/30(日) 17:26:25ありがとうございます。
実は実際のソースでは、2次元配列はクラスのprivate static const なメンバ変数なのですが
クラスの外からアクセサを使ってアクセスしたいのです。
その場合の記述も上記のようなものになるのでしょうか。
0022デフォルトの名無しさん
2008/03/30(日) 17:28:01002319
2008/03/30(日) 17:48:38すいません。2次元配列への参照を戻す関数の宣言は
どのように書けばいいでしょうか?
0024デフォルトの名無しさん
2008/03/30(日) 17:49:30お勧めの入門書・参考書があれば教えてください。
0025デフォルトの名無しさん
2008/03/30(日) 18:20:55const int (& getArray())[5][5] const {...; return ary;}
const int (& a)[5][5] = ....getArray();
0026デフォルトの名無しさん
2008/03/30(日) 18:21:16初心者スレか書籍スレへ。
0028デフォルトの名無しさん
2008/03/30(日) 18:34:43ないのでお帰りください。
0029デフォルトの名無しさん
2008/03/30(日) 18:41:35Cが理解出来ればC++は根性で分かる
クラス、派生、オーバーライド、演算子のオーバーライドとかね。
あんなもん構造体のラッパー
STL、テンプレートは知らんでも何とかなる
C++勉強中に.NetのC++をmanagedでやると
永遠に理解出来なくなると思われ。
0030デフォルトの名無しさん
2008/03/30(日) 18:52:450031デフォルトの名無しさん
2008/03/30(日) 19:01:37・・・まじ???
自称「C++得意です」なんですけど…
0032デフォルトの名無しさん
2008/03/30(日) 19:15:44まあ、俺もCから移った直後は>>29みたいなノリだったんだけどね。
「STL? なにそれおいしいの?」「テンプレート? つかわねーよhahaha!!」って。
0033デフォルトの名無しさん
2008/03/30(日) 19:17:07003419
2008/03/30(日) 19:19:15たとえば"error C2143: 構文エラー : ';' が '<cv-qualifer>' の前にありません"などです。
開発はVS2008で行っています。
class Map{
public:
virtual const int (& getMap())[1000][1000] const = 0;
};
class FirstBasement : public Map{
private:
static const int floor[30][30];
public:
// 地図の状態を返す
virtual const int (& getMap())[30][30] const;
};
const int (& FirstBasement::getMap())[30][30] const{
return FirstBasement::floor;
}
0035デフォルトの名無しさん
2008/03/30(日) 19:23:11constの位置が違う。
virtual const int (& getMap() const)[1000][1000] = 0;
0036デフォルトの名無しさん
2008/03/30(日) 19:28:29003719
2008/03/30(日) 19:29:05うまくいきました。ありがとうございます。
ただ配列の大きさも同じでないとオーバーライドできないのですね。
0039デフォルトの名無しさん
2008/03/30(日) 19:31:43C使いこなせる人尊敬するわ
0040デフォルトの名無しさん
2008/03/30(日) 19:34:110041デフォルトの名無しさん
2008/03/30(日) 19:37:08配列型は要素数が違えば別の型。
型が違えばオーバーライドにならない。
戻り型と違う型はreturnできない。
なんだか難儀しそうだね。
0042デフォルトの名無しさん
2008/03/30(日) 19:39:30配列はついついポインタにキャストするからなぁ
>>39
Cだとクラス間の上下関係無いから、いつでもどこでも呼び出せて楽じゃない?
メンバにstaticつけた瞬間に敗北した気がする。
classやらの基本構文書いて15分、とかイライラする。
Cならいきなり呼び出せるのに、て思うとね〜
というか、Cから入ってC++使う機会が少なかったから
脳内でクラス構造が上手に作れないらしいw
STLよりANSIライブラリの方が手軽で使い易いし覚え易いし・・・
0043デフォルトの名無しさん
2008/03/30(日) 20:08:44ウン百万行ってソースを担当すりゃわかるようになる。
>いつでもどこでも呼び出せて楽
楽だからスパゲッティーが生まれやすくなる。
0044デフォルトの名無しさん
2008/03/30(日) 20:17:500045デフォルトの名無しさん
2008/03/30(日) 20:26:15オブジェクト指向のキモというか
従来どおりにやろうとするなら単なるオーバーヘッドの増加でしかないようなw
0046デフォルトの名無しさん
2008/03/30(日) 20:27:160047デフォルトの名無しさん
2008/03/30(日) 20:30:070048デフォルトの名無しさん
2008/03/30(日) 20:39:37って、Cスタイルキャストですか?コンストラクタ呼んだことになってますか?
0049デフォルトの名無しさん
2008/03/30(日) 20:41:57いつでもどこでも呼び出せるようにして、良いんじゃない?
俺は良いと思うよ。STLは使うことを進めるけど。
オブジェクト指向もC++で扱えるパラダイムの一つに過ぎないからね。
ラムダ万歳。
0050デフォルトの名無しさん
2008/03/30(日) 20:42:48コンストラクタ。
0051デフォルトの名無しさん
2008/03/30(日) 20:47:59ありがとうございます。
いままで
static_cast<string>("hagehage");
って書いてたんですが、今度から>>48ですませることにします。
0052デフォルトの名無しさん
2008/03/30(日) 20:59:35状況によるだろうけど、それ書く機会少なくない?
明示しなくても変換(コンストラクタが選択)されるよ。
void f(const std::string& s);
f("aaa"); //OK
std::string s = "aaa"; //OK
0054デフォルトの名無しさん
2008/03/30(日) 21:07:04何が悪いのでしょうか。
エラー 1 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません d:\root\gamecreation\rpg\movestrategy.h 17 RPG
エラー 2 error C2143: 構文エラー : ',' が '&' の前にありません。 d:\root\gamecreation\rpg\movestrategy.h 17 RPG
エラー 3 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません d:\root\gamecreation\rpg\movestrategy.h 21 RPG
エラー 4 error C2143: 構文エラー : ',' が '&' の前にありません。 d:\root\gamecreation\rpg\movestrategy.h 21 RPG
#include "Map.h"
#include "EDirection.h"
#include "DxLib.h"
namespace hogehoge{
class MoveStrategy{
public:
// 仮想デストラクタ
virtual ~MoveStrategy();
// 移動アルゴリズム
virtual EDirection Move(const Map& map) const = 0;
protected:
// 移動可能かチェック
virtual bool IsMovable(const Map& map, const int& direction) const;
};
}
0055デフォルトの名無しさん
2008/03/30(日) 21:09:35えっと、メンバのreplace使う時とかで、リテラルの長さがほしくてstringに入れる場合、つまり
str.replace(str.find("あ"),(string("あ")).length(),string("い"));
こういう場面とか、文字列を+でつないでいく、たとえば
str = "my name is " + name + "\n"; // エラー
str = string("my name is") + name + string("\n");
こういう場面みたいな時です。
0056デフォルトの名無しさん
2008/03/30(日) 21:19:20Mapが定義されて無いんじゃね?
>>55
それならおk。
0057デフォルトの名無しさん
2008/03/30(日) 21:26:00見逃してた。stringへの+も明示する必要ないから
string("\n") は "\n" だけで良いよ。
str = string() + "my name is" + name + "\n";
でもおk。
0058デフォルトの名無しさん
2008/03/30(日) 21:27:50ありがとうございます。解決しました。
確かにMapがおかしかったです。
原因はMapで純粋仮想関数ではなく、ただの仮想関数を宣言していただけなのに
その定義を持っていなかったことでした。
0059デフォルトの名無しさん
2008/03/30(日) 21:36:52>str = string() + "my name is" + name + "\n";
わーお(`・ω・´)いろいろありがとうございます。
0060超初心者29=42
2008/03/30(日) 21:39:35ン百万行・・・
いいとこ10万行ぐらいだな、触ってたのは
ン百万のソースを触るなんてオープン系の人?(´・ω・`)??
PCアプリでン百万行たって、
モジュール化進んでるからン百万だろうが怖くないしな
名前空間なんかイラネの世界で生きて来たからな〜w
Cだとヘッダ単位でモジュール化したりするモンだが。。
規模が違うんだろうな〜〜。。。。
0061デフォルトの名無しさん
2008/03/30(日) 21:45:240062デフォルトの名無しさん
2008/03/30(日) 21:49:29006354
2008/03/30(日) 21:50:15以下のようなクラス宣言があります。
#include "Player.h"
#include "Enemy.h"
#include "Map.h"
#include <vector>
namespace hogehoge{
/**********************************
* 概要: 地図の振る舞いを管理する *
**********************************/
class Map{
public:
static const int CHIP_SIZE = 15;
protected:
Player* player;
//std::vector<Enemy> *enemy;
public:
// コンストラクタ
Map();
//仮想デストラクタ
virtual ~Map();
// 地図を表示する
virtual void Display() const = 0;
// 地下1階への状態を返す
virtual const int (& getMap() const)[30][30] = 0;
};
}
006454
2008/03/30(日) 21:51:09エラー 1 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません d:\root\gamecreation\rpg\movestrategy.h 17 RPG
エラー 2 error C2143: 構文エラー : ',' が '&' の前にありません。 d:\root\gamecreation\rpg\movestrategy.h 17 RPG
ここから#include "Enemy.h"を取ると、エラーなくコンパイルできます。
Enemy.hは以下のようになっています。
#include "Map.h"
#include "EDirection.h"
#include "DxLib.h"
namespace hogehoge{
class MoveStrategy{
public:
// 仮想デストラクタ
virtual ~MoveStrategy();
// 移動アルゴリズム
virtual EDirection Move(const Map& map) const = 0;
protected:
// 移動可能かチェック
virtual bool IsMovable(const Map& map, const int& direction) const;
};
}
上のエラーはどういう意味なのでしょうか。
0065デフォルトの名無しさん
2008/03/30(日) 21:52:20同じ同じ。
言語のサポートが優位な点だけど、
大枠でのプログラム層なアーキテクチャはC,C++で左右されないと思うよ。
0066デフォルトの名無しさん
2008/03/30(日) 22:01:25>型指定子がありません - int と仮定しました
コンパイラ:「const Map」がよく分からないので、「const int Map」だと考えますね
>',' が '&' の前にありません
コンパイラ:「const int Map&」、なんか変数名のあとに「&」が出て来たんですけど
006766
2008/03/30(日) 22:04:462つ目のエラーは、1つ目の仮定のせいで発生してるってことね。
006829=42超初心者
2008/03/30(日) 22:07:33Map ってクラスが入れ子になってるからじゃないの?
ヘッダの相互参照になってる
enemy.h の頭に
class Map;
ての入れてコンパイル通らない?
もしくは cpp 内のみにヘッダ参照宣言入れて、ヘッダ内からの include
やめるとか
MS VC ならエラー行間違えない筈なんだけどな
すげー適当に答えてるけどw
>>61
>>62
共同作業でのプログラミング経験ほとんど無いんで〜
他人の綺麗なコードをスパゲティにした事なら何度もあります。未だバレてませんヨ、HAHAHA
006954
2008/03/30(日) 22:18:50ありがとうございます。
class Map;
class MoveStrategy{
};
class Map;
class Enemy{
};
とすると、エラーはごっそり減ったのですが、まだ以下のようなエラーが残ります。
エラー 1 error C2061: 構文エラー : 識別子 'MoveStrategy' d:\root\gamecreation\rpg\enemy.h 16 RPG
ヘッダの相互参照というのは
#ifndef をしていたら、必ず防げるものではないのですか?
0070デフォルトの名無しさん
2008/03/30(日) 22:28:30B b;
};
class B{
A a;
};
要はこれと同じ状態。前方宣言でも回避できない。これも
class A{
A a;
};
という問題に帰着できるから分かるだろ
007129=42超初心者
2008/03/30(日) 22:32:18無理かと
#include "map.h"
#include "Enemy.h"
の2行は次の形に展開される
class Map {
... void ( Enemy *pEnemy ); <= ★注意★class Map 宣言より上に class Enemy 宣言が無い
} この時点でコンパイラは class Enemy の情報を持たないのでエラー
class Enemy {
... void ( Map *pMap );
}
となり、エラー
だから #include が展開された時に
Enemy.cpp :
class Map;
class Enemy {
... void ( Map *pMap );
}
Map.cpp :
class Enemy;
class Map {
... void ( Enemy pEnemy );
}
にするのが手っ取り早い
VC 使ってるなら #pragma once 使った方がコードスッキリするよ
0072デフォルトの名無しさん
2008/03/30(日) 22:32:45必然的にコード量は増えるし、オブジェクト指向も取り入れるんだろう。
制御屋だとシステムの大きさに比例してでかくなるけど
担当も細分化されて、一人で担当するところはそれほどでもないね。
安全に関わるから。
007329=42超初心者
2008/03/30(日) 22:40:43エミュレータ使ってもバグ取れないなんてザラだからねぇ・・・
ブレークポイント張りずらいし
組込み系だとC++コンパイラが無いこと多い
ミドルウェアでC以外のもの見た事ないし。
linuxのほとんどのコアソースがCでなのも傍証してる(ソースが古いのも一因)
gccだけはブレークかけても、どこがバグなのかさっぱり分からん(´・ω・`;;;)
モジュール化の概念はドコ行っても同じかも
0074デフォルトの名無しさん
2008/03/30(日) 22:42:58例外とかメモリ確保とか制限は多いけど
007554
2008/03/30(日) 22:43:31一応上のエラーは,これも class MoveStrategy; を追加することで消えました。
有益な情報ありがとうございます。
この問題に関して不案内なところがあるので、もう少し勉強してみます。
0076デフォルトの名無しさん
2008/03/30(日) 22:51:40そこでcfrontですよ
0077デフォルトの名無しさん
2008/03/30(日) 23:06:52PCみたいにはいかないけど。
0078デフォルトの名無しさん
2008/03/30(日) 23:17:001週間後にフリーズ>再起動したら直りました、で
原因がmallocじゃどうにもならないしな〜。
RAMの必要量が予想出来ないしなぁ。。。
C++の展開命令見ると何書いてあるか分からないしなぁ
Cならまだしも。
0079デフォルトの名無しさん
2008/03/30(日) 23:49:400080デフォルトの名無しさん
2008/03/31(月) 06:05:05【やりたいこと】 データファイルを読み込んで、ダイクストラ法を使って最短ルートを求める
【条件】
ノードは可変数個、コストは全て正の値、スタートノード及びゴールノードは
dijkstra.exe -start_node -goal_node のようにプログラム開始時に与える。
【何が分からないのか】
可変数個のノードや、エッジがどのノードに向かって延びているか、
かかるコストはいくらか等のデータをどのようにデータファイルに格納するか、データファイルの構造決定。
データファイルの構造が決定したとして、どのように可変数個のデータを読み込むか、
どうやってデータの終わりを探すか。ファイルからデータを読み込んだとして、データの整合性を
どのように検証するか。
分からないことばかりですが、誰かヒントだけでも教えて下さい。宜しくお願いします。
0081デフォルトの名無しさん
2008/03/31(月) 06:25:26亀レスだけど、typedefするのも1つの手。
typedef int IA_5[5];
IA_5 array[3] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}}; // == array[3][5]
IA_5* func(){ return array; }
int main()
{
IA_5* p = func();
for(int i = 0; i < 3; ++i){
for(int j = 0; j < 5; ++j) cout << p[i][j] << " ";
cout << endl;
}
return 0;
}
0082デフォルトの名無しさん
2008/03/31(月) 06:37:54可変個のデータ読み込みは、非常に基礎的で、ダイクストラ法と関係ないですよ
それをまず出来るようになって下さい
0083デフォルトの名無しさん
2008/03/31(月) 06:38:58C++でも良いんですか? もし良ければSTLを使ってノードを管理すると簡単と思います
0084デフォルトの名無しさん
2008/03/31(月) 06:57:59レスありがとうございます。私の修行が足りないようで、お恥ずかしい限りです。
勉強して理解を深めてからもう一度出直してきます。スレ汚してすみませんでした。
0085デフォルトの名無しさん
2008/03/31(月) 07:23:05#include <vector>
#include <iostream>
#include <set>
using namespace std;
class node {
public: unsigned int dis,ver;
node(){ ver=dis=-1;}
node(unsigned int i, unsigned int d){ dis=d; ver=i; }
bool operator < (const node &x) const { return (dis<x.dis); }
};
typedef set<node> vertex;
main(){
vector< vertex > g; //グラフの定義
g.push_back(vertex()); //頂点追加
g[0].insert(node(1,3)); //辺と距離の追加
g[0].insert(node(2,5));
g[0].insert(node(3,2));
vertex::iterator p=g[0].begin();
cout<<(p->ver); // 最も短い距離の頂点を出力
}
0086デフォルトの名無しさん
2008/03/31(月) 11:15:09いろんなサイトの見よう見まねで下記ソースを試してみたところ
ビルドして一瞬ウィンドウが出て終わってしまいます。
これはreturn 0のせいかと思って、return 0を消しても
やはり一瞬で終わってしまいます。
どうすれば終了しないでコマンドプロンプトのような画面で
文字が確認できるようになるのでしょうか。
#include <iostream>
int main(void){
using std::cout;
using std::endl;
int a;
int &alias = a;
alias = 100;
cout << "a = " << a <<endl;
cout << "alias = " << alias <<endl;
return 0;
}
0087デフォルトの名無しさん
2008/03/31(月) 11:32:42return 0;
0088デフォルトの名無しさん
2008/03/31(月) 11:41:03ありがとうございます!ようやく確認できるようになりました。
キーボード入力待機状態にして止めるんですね。
勉強になりました。
0089デフォルトの名無しさん
2008/03/31(月) 11:41:050090デフォルトの名無しさん
2008/03/31(月) 11:45:24デバッグなしでビルドというのでも止まるんですね。
ありがとうございます。
C言語はいろいろ解らないことばかりで非常に助かります。
0091デフォルトの名無しさん
2008/03/31(月) 11:48:00コマンドプロンプトで実行するか、>>87
0092デフォルトの名無しさん
2008/03/31(月) 12:04:44それらはCの知識ではない。Windowsの使い方の知識とVisualStudioの使い方の知識だ。
0093デフォルトの名無しさん
2008/03/31(月) 12:36:21Boostのグラフライブラリを使う
0094デフォルトの名無しさん
2008/03/31(月) 14:10:05ポインタの勉強をしているのですがサンプルのコードを動かしてみたところうまくいきません
0095デフォルトの名無しさん
2008/03/31(月) 14:13:24はやくプログラミングしたいよ。
0096デフォルトの名無しさん
2008/03/31(月) 14:20:17コメント欄がすごいことにw
0097デフォルトの名無しさん
2008/03/31(月) 14:23:25もうこの人終わりだなw
0098デフォルトの名無しさん
2008/03/31(月) 14:28:30*n = 5; /* ポインタ変数nに値5を代入 */
初期化もポイントする先も決めてないポインタをそのまま使うのって非常に不味いよねぇ
自分ははじめにポインタの初期化を必ずするよう教わったがなぁ
0099デフォルトの名無しさん
2008/03/31(月) 14:40:39あー、前スレで話題になった奴か。
エピステーメーにまで指摘されていたのに未だに記事の修正が入らないのね。
編集がコメントなにやらゴミを書いているけどそんなものは記事の修正とは認められないし。
この程度のコメントじゃZDNETとしても著者としても痛くも痒くもないのでしょ。
0100デフォルトの名無しさん
2008/03/31(月) 14:46:23もしや本人さま(えぴさん)で?
0101デフォルトの名無しさん
2008/03/31(月) 14:48:48フォールト ->00401007 c70005000000 mov dword ptr [eax],0x5 ds:0023:00000001=????????
だってさ。
*n = 5: の部分かな。エラーがソース乗せちゃまずいでしょw
0102デフォルトの名無しさん
2008/03/31(月) 14:49:42○ エラーがでるソース乗せちゃまずいでしょw
0103デフォルトの名無しさん
2008/03/31(月) 14:54:00コンパイラにもよるんじゃね?
いや、試してないけど
0104デフォルトの名無しさん
2008/03/31(月) 14:55:060105デフォルトの名無しさん
2008/03/31(月) 14:56:590106デフォルトの名無しさん
2008/03/31(月) 14:57:200107デフォルトの名無しさん
2008/03/31(月) 14:59:25必ずしも 異常 終了するとは限らない
ポインタの指す先による
>>106
場合によっては動くコード
0108デフォルトの名無しさん
2008/03/31(月) 15:03:01勘弁してほしいタイプのバグ
#include<stdio.h>
void hoge(void){
static int a=5;
int *n=&a;
printf("a=%d\n", a);
}
void huga(void){
int *n;
*n=100;
}
int main(void){
hoge();
huga();
hoge();
return 0;
}
010999
2008/03/31(月) 15:13:55落ち着け。「以上終了」になっているぞw
>>100
勘弁してくれ。一緒にされたらそれはそれで迷惑だ。
もし私がエピたんなら、自分のブログでネタにしているよ。
いや、それだと本人が書いていたら拙いな。
……と思って検索したら、やっぱり書いていたかw
で、ついでにうろついたらまぁ、他にも釣れた罠。
0110デフォルトの名無しさん
2008/03/31(月) 15:21:400111デフォルトの名無しさん
2008/03/31(月) 15:30:11自称C++のちょっと偉い人
0112デフォルトの名無しさん
2008/03/31(月) 15:31:34かといって、C++の隅から隅まで知っているわけではなくて、
Boostのコミッタというわけでもなくて、
意外に中途半端な立ち位置な気がするお人。
でも、俺より知識も経験もあるのは確実。
0113デフォルトの名無しさん
2008/03/31(月) 15:32:340114デフォルトの名無しさん
2008/03/31(月) 15:33:230115デフォルトの名無しさん
2008/03/31(月) 15:36:26> 現在、本稿には技術的観点から異議が多数寄せられているため、詳細をレビュー中です。
> 初めてご覧になる方は、コメント欄もあわせてお読み下さい。
> また、読者の皆様には引き続き、コメントなどでご意見を頂けましたら幸いです。
そんな大層なレベルの話なのか…?
0116デフォルトの名無しさん
2008/03/31(月) 15:39:40>初めてご覧になる方は、コメント欄もあわせてお読み下さい。
>また、読者の皆様には引き続き、コメントなどでご意見を頂けましたら幸いです。
厳しくなったw
0117デフォルトの名無しさん
2008/03/31(月) 15:44:52ポインタの基本的な部分で苦労したことがないのでそこら辺が不思議だ
0118デフォルトの名無しさん
2008/03/31(月) 15:45:30おい。間違えて「記事推薦者になる」ってとこクリックしちまったぞ。
どうやって取り消すんだ。おい。教えろ。
0119デフォルトの名無しさん
2008/03/31(月) 15:50:36昔教える立場にあったことがあるが、何でかしらんが分かる奴と分からん奴がいて、
分からん奴はいくら教えてもなかなか理解してくれん。
メモリってのがリニアな空間で位置や距離の概念があることを理解できないらしい。
0120デフォルトの名無しさん
2008/03/31(月) 15:55:350121デフォルトの名無しさん
2008/03/31(月) 15:56:25ワロヌ
0122デフォルトの名無しさん
2008/03/31(月) 16:00:32俺もそうだけど、アセンブラから入ると、「ポインタが分からない」と言う人がどう分からないのか分からない
新人に教えるときなんかにとても苦労する
0123デフォルトの名無しさん
2008/03/31(月) 16:07:17値:ケーキ
ポインタ:「戸棚にケーキがあります」という母ちゃんの置き手紙
0124デフォルトの名無しさん
2008/03/31(月) 16:09:03訳わからんw
0125デフォルトの名無しさん
2008/03/31(月) 16:17:56戸棚の場所が書いてあるメモ、なんじゃね?
0126デフォルトの名無しさん
2008/03/31(月) 16:25:27値: 箱にいれる何か
ポインタ: 箱が置いてある場所を書いてあるメモ
みたいな解釈でいいんだろうか?
ポインタを正しく理解できてるか自分でもよくわからん。
0127デフォルトの名無しさん
2008/03/31(月) 16:25:38012899
2008/03/31(月) 16:31:080129デフォルトの名無しさん
2008/03/31(月) 16:38:46これほどポインタの概念がわかってなくても
使えるのか、JAVAって。
ある意味うらやましいかも。
0130デフォルトの名無しさん
2008/03/31(月) 16:45:21そして後から置き手紙を読んだワカメが大激怒
0131デフォルトの名無しさん
2008/03/31(月) 16:45:51でも、ポインタも理解できないような人が書いたJavaのコードって、やっぱりどこか危なげなんじゃないかね
0132デフォルトの名無しさん
2008/03/31(月) 16:47:44Access Violationのメッセージボックスのアイコンに、ワカメの顔が表示されるとこ想像した。
0133デフォルトの名無しさん
2008/03/31(月) 16:52:23それらの本も、もしかすると同じようにでたらめな知識に基づいて書いてるんじゃないかと疑わざるを得ない気がする。
0134デフォルトの名無しさん
2008/03/31(月) 17:06:45参照がBoostのスマートポインタと同じようなもので
理解できない人は怪しいコードいっぱい書くことに
0135デフォルトの名無しさん
2008/03/31(月) 17:11:39なんで*Boostの*って制限を設けるか理解しかねるけど、
Javaの参照はポインタそのものと同じようなもので、
それに加えて参照されなくなってからは回収される可能性があるだけ。
C++でのスマートポインタはローカルに限れば基本的にスコープを抜けた時点で回収されるから、
JavaのGCとは少し違う。
0136デフォルトの名無しさん
2008/03/31(月) 17:17:49かといって自分で何もかも把握して処理するのも面倒
なかなかバランスが難しいのねぇ
0137デフォルトの名無しさん
2008/03/31(月) 17:20:59もっとC++成分を取り入れたJavaライクな言語とかあればうれしいんだけど。
0138デフォルトの名無しさん
2008/03/31(月) 18:07:300139デフォルトの名無しさん
2008/03/31(月) 19:35:480140デフォルトの名無しさん
2008/03/31(月) 19:38:060141デフォルトの名無しさん
2008/03/31(月) 19:39:180142デフォルトの名無しさん
2008/03/31(月) 19:44:39豆腐屋っぽいよね
0143デフォルトの名無しさん
2008/03/31(月) 19:47:250144デフォルトの名無しさん
2008/03/31(月) 19:51:400145デフォルトの名無しさん
2008/03/31(月) 20:04:370146デフォルトの名無しさん
2008/03/31(月) 20:11:270147デフォルトの名無しさん
2008/03/31(月) 20:13:03仕様が違いすぎて大変なので面倒くさい。
0148デフォルトの名無しさん
2008/03/31(月) 21:44:25違うよ。
値は数値とか文字列とかの事で、変数は値につける名札で、ポインタは値がアドレスの変数の事だよ。
0149デフォルトの名無しさん
2008/03/31(月) 22:37:22エロ本が変数で、収録されてる写真が値
ポインタはエロ本という変数で(便宜上*がついてる、というかポインタであることの証)、そのポインタの値はページ数
ってな理解でいいの?
0150デフォルトの名無しさん
2008/03/31(月) 22:52:480151デフォルトの名無しさん
2008/03/31(月) 23:07:500152デフォルトの名無しさん
2008/03/31(月) 23:08:450153デフォルトの名無しさん
2008/03/31(月) 23:12:310154デフォルトの名無しさん
2008/04/01(火) 00:20:550155デフォルトの名無しさん
2008/04/01(火) 00:25:050156デフォルトの名無しさん
2008/04/01(火) 01:34:060157デフォルトの名無しさん
2008/04/01(火) 01:56:47どう使われようがしったこっちゃない
0158デフォルトの名無しさん
2008/04/01(火) 08:09:08インターフェースとして定義したクラスを継承
0159デフォルトの名無しさん
2008/04/01(火) 08:51:50>エロ本が変数で、収録されてる写真が値
この解釈だとエロ本はunionの配列で、ページ数は配列のindex。
0160デフォルトの名無しさん
2008/04/01(火) 08:52:39http://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20370255,00.htm
このサイトのドコがおかしいのでしょうか?
0161デフォルトの名無しさん
2008/04/01(火) 09:02:23コメント欄の通り
0162デフォルトの名無しさん
2008/04/01(火) 09:50:070163デフォルトの名無しさん
2008/04/01(火) 10:54:05>このサイトのドコがおかしいのでしょうか?
殆ど全て。
0164デフォルトの名無しさん
2008/04/01(火) 11:53:26普通に「記事」とか言えよ
安っぽい釣り針だな
0165デフォルトの名無しさん
2008/04/01(火) 11:56:110166デフォルトの名無しさん
2008/04/01(火) 12:36:030167デフォルトの名無しさん
2008/04/01(火) 12:56:310168デフォルトの名無しさん
2008/04/01(火) 15:17:060169デフォルトの名無しさん
2008/04/01(火) 15:20:550170いっそ誰か転載してくれw
2008/04/01(火) 15:26:22>ポインタ変数を定義するには、通常の型の場合とは異なり、型名の後ろに * がつけられる。
よくあるダメドキュメントのパターンである、主語と述語の関係が狂ってしまっている。
この文章は誰の手によるものだろうか。筆者? 編集? レビュアー?
いっそ企画から遣り直しては如何だろうか。
0171デフォルトの名無しさん
2008/04/01(火) 16:03:48はずかしすぐるwww
0172デフォルトの名無しさん
2008/04/01(火) 16:21:59しかし、事前の校正をしなかった報いだ。
この冨田って人が担当だったかどうかは知らんが。
builderの信頼性も、これで地に落ちたな(あったかどうかは不明だが)。
0173デフォルトの名無しさん
2008/04/01(火) 16:24:120174デフォルトの名無しさん
2008/04/01(火) 16:35:580175デフォルトの名無しさん
2008/04/01(火) 16:37:490176デフォルトの名無しさん
2008/04/01(火) 16:38:030177デフォルトの名無しさん
2008/04/01(火) 16:39:01バンブーブレードのアニメを思い出したw
0178デフォルトの名無しさん
2008/04/01(火) 16:40:540179デフォルトの名無しさん
2008/04/01(火) 16:41:470180デフォルトの名無しさん
2008/04/01(火) 17:10:38スミマセン『記事』でしたね。でもCあまり判らないので。。。
0181デフォルトの名無しさん
2008/04/01(火) 17:11:33特集だな。
>>180
それはC言語の問題じゃないだろ。
日本語やり直せ。
0182いっそ誰か転載してくれw
2008/04/01(火) 17:26:55こちらのページから引用してみよう。
http://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20368158-2,00.htm
--
データを区切る文字を空白などではないものにする方法だ。たとえば”%s,%s”とすれば、”abc def,ghi”を”abc def”と”ghi”という2つの値として入力することができる。
--
これも、実験してみれば直ぐに判るが出鱈目である。
一体全体、この特集はどんな技術者を作ろうと言うのだろうかw
0183デフォルトの名無しさん
2008/04/01(火) 17:44:370184デフォルトの名無しさん
2008/04/01(火) 17:46:36scanfで入力制限が出来ることを知らなかったorz
0185デフォルトの名無しさん
2008/04/01(火) 18:02:09普通は、scanf()では使いにくいから、入力制限はsscanf()で使うんだけどね。
所謂入門書でその辺りにきちんと触れているものは、知る限りないね。
0186デフォルトの名無しさん
2008/04/01(火) 18:07:300187デフォルトの名無しさん
2008/04/01(火) 18:11:27推薦の数が飛び抜けているな
0188デフォルトの名無しさん
2008/04/01(火) 20:53:23>また、doubleからはlong double(12バイト分)を派生させることができるが、
>floatではそれができないという違いがある。
ってどういう意味なんでしょうか?
0189デフォルトの名無しさん
2008/04/01(火) 20:58:36という型が無い事を言いたかったんじゃね?
日本語でおkな記事だな
こんなん初心者に読ませても害にしかならないな
0190デフォルトの名無しさん
2008/04/01(火) 21:01:050191デフォルトの名無しさん
2008/04/01(火) 21:15:410192デフォルトの名無しさん
2008/04/01(火) 21:19:0810 か 16 ならあるが。
0193デフォルトの名無しさん
2008/04/01(火) 21:22:4812bytes gcc (MinGW)
10bytes Borland C++ Compiler
0194デフォルトの名無しさん
2008/04/01(火) 21:23:280195デフォルトの名無しさん
2008/04/01(火) 21:34:38これだけ頓珍漢な記事だらけならパーフェクトも狙えるだろw
0196デフォルトの名無しさん
2008/04/01(火) 21:36:46これ何か不味いのか?
0197デフォルトの名無しさん
2008/04/01(火) 21:47:56#include <stdio.h>
int main() {
char a[10], b[10];
switch(sscanf("abc def,ghi", "%s,%s", a, b)) {
case 2:
puts("a, bともに読み込めた。");
puts(a);puts(b);
break;
case 1:
puts("aだけ読み込めた。");
puts(a);
break;
case 0:
puts("aもbも読み込めなかった。");
break;
case EOF:
puts("エラー");
}
return 0;
}
どうなるとおもう?
0198デフォルトの名無しさん
2008/04/01(火) 21:54:06bool rb = m_map.insert(std::make_pair(key, value)).second;
if(rb)
{
ほげほげ;
}
if(m_map.insert(std::make_pair(key, value)).second)
{
ほげほげ;
}
0199デフォルトの名無しさん
2008/04/01(火) 21:55:140200デフォルトの名無しさん
2008/04/01(火) 21:56:230201デフォルトの名無しさん
2008/04/01(火) 21:58:21aだけ成功
スペースの後が終端文字列になってた
0202デフォルトの名無しさん
2008/04/01(火) 21:58:43その程度なら最適化で消えることが期待できる。
>>198
実測重要。
0203デフォルトの名無しさん
2008/04/01(火) 22:00:300204デフォルトの名無しさん
2008/04/01(火) 22:00:55( )
, '´ ̄ `ヽ
/ ( ( 人人) ) 最適化すれば消えるのではないかと
|人| �V_�V|ノ ふじおかが言っている。
ノノ| |o○_⌒_○
( エ )
. o( )o
uu
0205デフォルトの名無しさん
2008/04/01(火) 22:05:510206デフォルトの名無しさん
2008/04/01(火) 22:15:46if(true != banana)と、書くとスピードが落ちますか?
0207デフォルトの名無しさん
2008/04/01(火) 22:21:010208デフォルトの名無しさん
2008/04/01(火) 22:21:460209デフォルトの名無しさん
2008/04/01(火) 22:24:30どういう意味でしょう?
MinGW でも unsigned int は 0〜4294967295 の範囲です
0210デフォルトの名無しさん
2008/04/01(火) 22:32:28とりあえず>>207に直したとして、まず変わらん。
むしろ変わる環境があったらちょっと興味がわく。
で、速度は実測が基本。一応ね。
0211デフォルトの名無しさん
2008/04/01(火) 22:46:020212デフォルトの名無しさん
2008/04/01(火) 22:47:050213デフォルトの名無しさん
2008/04/01(火) 22:56:11と、
>if(true != banana)
コードの意味合いが異なる
0214デフォルトの名無しさん
2008/04/01(火) 22:58:320215デフォルトの名無しさん
2008/04/01(火) 23:05:34{
hoge(){←エラー
rcdefault.top = 0;
rcdefault.left = 0;
rcdefault.buttom = 480;
rcdefault.right = 640;
}
static const RECT rcdefault;
}
性的で固定な構造体の中身はどうやって指定するの?
0216デフォルトの名無しさん
2008/04/01(火) 23:10:470217デフォルトの名無しさん
2008/04/01(火) 23:19:11static const A a;
};
const RECT HOge::a = {1,2,3,4};
0218デフォルトの名無しさん
2008/04/01(火) 23:27:05--
本来の名称は1文字のCなのだが、それだけだと分かりにくいからか、一般的にはC言語という。
--
# C言語と表記することが多いと認めるのは吝かではないが、果たして開発現場でC言語と呼ぶ輩はどれほどいるのだろうか。
--
子孫にあたるプログラム言語には、同じくオブジェクト指向が取り入れられているJavaなどがある。
--
# いつからJavaはCの子孫になったんだ?
ttp://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20363414-2,00.htm
--
しかし、前述の通り携帯電話などの機器の動作はC/C++で開発されたプログラムによって行われている。
--
# そうなんですか? 本当に?
ttp://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20366709-2,00.htm
--
floatよりもdoubleのほうが扱える数値の範囲が広くなる。そのため、floatよりもdoubleのほうが精密な値を表すことが可能になる。
--
# 「そのため」ではありません。無茶を言わんでください。
ttp://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20366845-2,00.htm
--
printf( "|%5.3f %-9.4f|", 12.34, 56.789 ); /* |12.340 56.7890 | */
--
# わざわざ初心者を混乱させなくてもいいでしょう。素直に%6.3fとしては如何?
0219デフォルトの名無しさん
2008/04/01(火) 23:36:510220デフォルトの名無しさん
2008/04/01(火) 23:37:350221デフォルトの名無しさん
2008/04/01(火) 23:40:22ここに書くと筆者が見てくれるの?
0222デフォルトの名無しさん
2008/04/01(火) 23:43:52who?
0223デフォルトの名無しさん
2008/04/01(火) 23:46:470224デフォルトの名無しさん
2008/04/01(火) 23:51:370225デフォルトの名無しさん
2008/04/01(火) 23:54:05あるスレッドが専用の関数に必要な引数を渡して、要求だけ
vectorにキューイングしてで出て行く、そして読み込み用のスレッドがこのvectorから
メッセージを取り出して画像読み込み操作を行うという形なんですが
なんかどこかで衝突?みたいなことが起こってるみたいで成功したり失敗したりです。。。
メッセージは追加時push_backで取り出し時begin()使ってます。
Javaのsynchronizedみたいに排他にするにはどうすればいいんでしょうか?
0226デフォルトの名無しさん
2008/04/01(火) 23:56:50STLはひどい事にマルチスレッドに対応してない実装をコンパイラ製作側が提供しても良い仕様になってるので、
別途マルチスレッドに対応したフラグを外側から用意するなど措置をとる必要がある。
0227デフォルトの名無しさん
2008/04/01(火) 23:56:59winならCriticalSectionやMutexとか。
それ以外でもならboost::threadとか。
0228デフォルトの名無しさん
2008/04/02(水) 00:03:510229デフォルトの名無しさん
2008/04/02(水) 10:01:26やってること同じだと思うんですけど。
0230デフォルトの名無しさん
2008/04/02(水) 10:10:280231デフォルトの名無しさん
2008/04/02(水) 10:10:50> 文字列を配列で宣言するのとポインタで宣言するのって何か違いがあるんでしょうか?
> やってること同じだと思うんですけど。
その通りやってることは同じなので、好きな方でどうぞ。
0232デフォルトの名無しさん
2008/04/02(水) 10:27:44VBを今週から始めた初心者です。
上司に教わりながらやっていますが、全くわかりません。
とりあえず、言われた仕事が
モジュール2で
Public Sub 関数名()
'表を追加します
End Sub
を作成して、モジュール1でcollで呼び出すらしいんですが
表を追加の関数がわかりません。
誰か教えて下さい。
0233デフォルトの名無しさん
2008/04/02(水) 10:28:52というかスレ違いだ。
0234デフォルトの名無しさん
2008/04/02(水) 10:29:30ここはC/C++スレだ
0235デフォルトの名無しさん
2008/04/02(水) 10:31:09その違いについて知りたいんですが、、、メモリの問題とかですかね
0236デフォルトの名無しさん
2008/04/02(水) 10:33:55申し訳ないです。
どこに書けばいいのかわからなくて。。。
0237デフォルトの名無しさん
2008/04/02(水) 10:37:380238デフォルトの名無しさん
2008/04/02(水) 10:48:57面白そうなので自分で作ってみることにします。
0239デフォルトの名無しさん
2008/04/02(水) 10:49:38辞めてしまいたいです。
0240デフォルトの名無しさん
2008/04/02(水) 10:55:29仕事じゃなくて課題なのでは? 未経験でも出来る課題を出されたんじゃないですか?
プログラム経験はあるんですか?
0241デフォルトの名無しさん
2008/04/02(水) 11:10:26ttp://tondol.ty.land.to/event/koushien/2006honsen/08.html
のプログラムなんですが、数字を二つ入力するのですが
1 2
という入力ではなく
3
というように数字一つで改行されたらプログラムを終了するようにしたいのですが
どのようにすればいいのでしょうか?
0242デフォルトの名無しさん
2008/04/02(水) 11:12:300243デフォルトの名無しさん
2008/04/02(水) 11:52:310244238
2008/04/02(水) 12:03:360245デフォルトの名無しさん
2008/04/02(水) 12:18:560246デフォルトの名無しさん
2008/04/02(水) 12:19:23排他処理を追加した分遅くなる。MutexよりもCriticalSectionセクションのほうが速いので用途に応じて使い分けるとよい。
0247デフォルトの名無しさん
2008/04/02(水) 12:20:210248デフォルトの名無しさん
2008/04/02(水) 13:01:07EXCELにVBAのリファレンスついてないのか?
まあ該当スレは検索すればすぐ見つかるだろうけど,質問しても
やってトライ.シリーズでいいからEXCEL/VBAの参考書一冊買え
みたいな話になるだけですぞ
0249デフォルトの名無しさん
2008/04/02(水) 13:21:53排他制御比較一覧
ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdndllpro/htm/metrsect.asp
0250デフォルトの名無しさん
2008/04/02(水) 13:22:450251デフォルトの名無しさん
2008/04/02(水) 13:23:13何度間違ってるんだorz
0253デフォルトの名無しさん
2008/04/02(水) 20:29:09TestProgプロジェクトにあるCTestClassクラスをライブラリにしてMainProjプロジェクトで使おうとしています。
CTestClassクラスが宣言されているTestClass.h、TestClass.cpp、そしてほとんどカラのstdafx.hとstdafx.cppをビルドしてTestProg.libを作成しました。
そしてMainProjプロジェクト内のファイルにて
#pragma comment(lib, "TestProg.lib")
このようにライブラリの使用を宣言するまでは問題なかった(ビルド成功)のですが、CTestClassを使おうとすると宣言がされていないとエラーが出ます。
ライブラリ内のクラスを使うにはこれらに加えて何かしないといけないのでしょうか?
ちなみにMainProjにTestClass.hとTestClass.cppを追加し、上記の#pragmaの代わりに
#include "TestClass.h" を入れるとエラーは出ませんでした。
0254デフォルトの名無しさん
2008/04/02(水) 20:43:050255デフォルトの名無しさん
2008/04/02(水) 20:55:23/ / / / / /
,.、 ,.、 / /
/ / ∠二二、ヽ / /
/ / / ((´・ω・`)) ちょっと船の様子を見に行ってくる…
/ ~~:~~~〈 / /
/ / ノ : _,,..ゝ /
/ / (,,..,)二i_,∠ / /
0256デフォルトの名無しさん
2008/04/02(水) 21:30:23// MainProjプロジェクトにTestProg.libとTestClass.hコピーして
#pragma comment(lib, "TestProg.lib")
#include "TestClass.h"
0257238
2008/04/02(水) 21:32:33..( *)
..( )〇
なんだか胸騒ぎがする・・・。
0258デフォルトの名無しさん
2008/04/02(水) 21:57:43"クラス::関数()", referenced from:
とエラーが出ます。
調べてもどういう意味のエラーかも分からずです。
どういう意味のエラーなんでしょうか?
0259デフォルトの名無しさん
2008/04/02(水) 22:12:53エラーメッセージはそれだけじゃないでしょ。前か後にも何か書いてあるはず。
0260デフォルトの名無しさん
2008/04/02(水) 22:14:58ありがとうございます。使えるようになしました。
>>254
それは何度も疑っていたので大丈夫でした。
パスが通っていないとエラーが出ますしlib自体が正常に更新されているかどうかも確認していました。
複数のサブプロジェクトでクラスを作り、メインプロジェクトでこれらをライブラリとして読み込むために試行錯誤していました。
.hと.cppをコピーしてメインプロジェクトに追加するとメインプロジェクトだけで変更が可能なのと
ファイル数が膨大になり管理がしにくくなるので改善したいと言うのが主な理由です。
今回の場合ですとMainProjプロジェクトでCTestClassクラスのメンバ変数や関数を自由に追加することが出来てしまったり
TestProgプロジェクトでCTestClassクラスを更新するとMainProjプロジェクトのTestProg.libだけでなくTestClass.hの更新も必要になってしまいます。
MainProjプロジェクトのCTestClassクラス自体に変更が加えられないような仕組みや
更新がlibだけで済むような方法は無いものなのでしょうか。
0261デフォルトの名無しさん
2008/04/02(水) 22:31:40少なくともprivateメンバの変更では共有するヘッダに影響を与えないで済む。
0262デフォルトの名無しさん
2008/04/02(水) 23:05:52あと、クラスのメンバ関数を列挙する方法はありますか
template<typename T> void enum_functions() {
if (T::is_class()) {
for (int i = 0; i < T::func_count(); ++i) {
std::cout << T::func_name(i) << '\n';
}
}
}
みたいな感じで。
0263デフォルトの名無しさん
2008/04/02(水) 23:22:54嘘はいかんよ。
>>235
>char a[]="test";とchar *b="test";
*a='T'; /* OK */
a[0]='w'; /* OK */
// *b='T'; /* NG */
b=a; /* OK */
*b='T'; /* OK */
b[0]='w'; /* OK */
// a=NULL; /* どうだったっけ?*/
0265デフォルトの名無しさん
2008/04/02(水) 23:30:32*b='T'; /* OK */
どっちだよ
0266253,260
2008/04/02(水) 23:32:01初めて知った単語なので非常に有難いです。
結局クラスをライブラリにするのはcppファイルの中身が見えなくなるだけで(ビルドが早くなったりもしますが)
いかにヘッダ部分をcppに移せるかで使用先(メインプロジェクト)での可変性が変わると言うことでしょうか。
0267デフォルトの名無しさん
2008/04/02(水) 23:34:28思い描いている形とは違うかもしれないけど、
BoostまたはTR1にType Traitsに、is_classというものがある。
かなりコンパイラを選ぶだろうけど。
さすがにメンバの列挙はない。
0268デフォルトの名無しさん
2008/04/02(水) 23:35:43すいません。
"クラスA::関数()",referenced from:
クラスB::関数() in クラスB.o
symbol(s) not found
collect2:ld returned 1 exit status
とあります。
0269デフォルトの名無しさん
2008/04/02(水) 23:40:16// *b='T'; /* NG */
b=a; *b='T'; /* OK */
分かりにくくてスマソ
0270デフォルトの名無しさん
2008/04/03(木) 00:43:38クラスB.o の中に入っている クラスB::関数() から参照されている "ク
ラスA::関数()" というシンボルが見付かりません、
とリンカー様(ld)が怒ってらっしゃる。
つまり、クラスA::関数() をコンパイルした .o ファイルやそれが入っ
ているライブラリをコマンドラインに指定する必要がある。
0271デフォルトの名無しさん
2008/04/03(木) 04:53:36wchar_t buff[3];
とあって
SHIFT-JISで書かれたテキストから、fgetwsで読み込む事で
例えば、
「もじ」
ならば
buff[0]<=も
buff[1]<=じ
と、入る事を望みます。
このような処理をする場合、どのようにすればいいのでしょうか?
ちなみに、fgetwsで読むと、buff[0]とbuffr[1]で"も"が入ってしまいます。
fgetwsはsjisで書かれたテキストを自動で変換して読み込んでくれると聞いたのですが・・・。
0272デフォルトの名無しさん
2008/04/03(木) 05:00:49テキストを、UTF16のBOMなしにして
setlocale(LC_CTYPE, "");を設定し、バイナリモードで読めばよかったんですね。
出来れば、SJISから変換されるとありがたいんですが・・・。
0273デフォルトの名無しさん
2008/04/03(木) 08:16:33という変数があるとして、
for (int i = 0; i < vec.size(); i++) {.....}
とか書くとintとunsigned intを比較してるという警告がでて嫌なのでstatic_cast<int>(vec.size())
とかやってるのですが、これもいやです。どうすればいいですか?
0274デフォルトの名無しさん
2008/04/03(木) 08:28:552.iteratorを使う。
3.STLのアルゴリズムを使う。
0275デフォルトの名無しさん
2008/04/03(木) 08:43:334.iをunsignedにする。
0276デフォルトの名無しさん
2008/04/03(木) 08:51:22STLのアルゴリズムを使うというのは、for文の中でやりたかったことがSTLのアルゴリズムで
表現できる必要がありますよね?常にできるということではないですよね?
0277デフォルトの名無しさん
2008/04/03(木) 08:55:56まずは環境を書こう。
0278デフォルトの名無しさん
2008/04/03(木) 08:59:30{...}の内容によってはちょっと面倒かも知れんので、その場合は2.かな。
0279デフォルトの名無しさん
2008/04/03(木) 12:04:46public:
double re;
double im;
};
こういうクラスがあるときに、operator>>(istream &, complex &a) を定義するとすると、
どういう風にやるのがよいでしょうか?
0280デフォルトの名無しさん
2008/04/03(木) 12:07:170281デフォルトの名無しさん
2008/04/03(木) 14:05:47MinGWインストーラがネット無いので使えません
ソースフォージからどれを落とせば良いでしょうか
またそれは全て同じフォルダに上書きで良いでしょうか
binフォルダなどかぶっているものがおおいんです
使いたいのはC、C++、SDL、OpenGLです
パスは適当に通そうと思っています
0282デフォルトの名無しさん
2008/04/03(木) 15:08:36大陸へカエレ
0283デフォルトの名無しさん
2008/04/03(木) 15:10:110285デフォルトの名無しさん
2008/04/03(木) 15:47:080286デフォルトの名無しさん
2008/04/03(木) 15:48:47未定義です
0287デフォルトの名無しさん
2008/04/03(木) 15:52:350288デフォルトの名無しさん
2008/04/03(木) 15:54:42MTI(Multiple Top Level Window)風に同時に取扱たいです。
何か参考となるキーワードやソースやwebpageを教えて頂けないでしょうか。
0289デフォルトの名無しさん
2008/04/03(木) 16:00:47VC入ってるのならF1押してヘルプを見るのだ
0290デフォルトの名無しさん
2008/04/03(木) 16:43:19キーワード:
モードレスダイアログ
タイマー
0291デフォルトの名無しさん
2008/04/03(木) 17:14:420292288
2008/04/03(木) 17:16:36モードレスダイアログだとダイアログが子になってしまって、ちょっと欲しいものじゃないんです。
親子関係はなし、もしくはCMainFrameを子にしたいんです。
0293デフォルトの名無しさん
2008/04/03(木) 17:16:390294デフォルトの名無しさん
2008/04/03(木) 17:44:43comlex& operator>>(istream & a)
0295デフォルトの名無しさん
2008/04/03(木) 17:52:31ウィンドウ無か非表示の親からメインフレームとダイアログ作れば兄弟になる
0296デフォルトの名無しさん
2008/04/03(木) 17:59:36こういうのって、Cの仕様なんでしょうか? それともコンパイラの方の仕様なんでしょうか?
まとまった文章や文献をご存知の方がいらしゃいましたらよろしくお願いいたしますm(_ _)m
0297デフォルトの名無しさん
2008/04/03(木) 18:05:310298デフォルトの名無しさん
2008/04/03(木) 18:09:020299デフォルトの名無しさん
2008/04/03(木) 18:12:00http://msdn2.microsoft.com/en-us/library/yhfk0thd.aspx
>>296
独自
http://msdn2.microsoft.com/en-us/library/3y1sfaz2.aspx
0300デフォルトの名無しさん
2008/04/03(木) 18:20:47一部の組み込みマクロを除いて、他は全て処理系の拡張仕様。
0301デフォルトの名無しさん
2008/04/03(木) 18:21:29>>299
ありがとうございます。勉強してみます。
0302300
2008/04/03(木) 19:09:120303デフォルトの名無しさん
2008/04/03(木) 19:19:55ばかじゃねぇのw
0304デフォルトの名無しさん
2008/04/03(木) 19:31:24アフリカではよくあること
0305デフォルトの名無しさん
2008/04/03(木) 19:45:47すみません、気づきませんでした^^; ありがとうございます。
同じWindows環境でも、処理系に依存する部分は結構ありそうなので、頑張って調べてみます><
0306デフォルトの名無しさん
2008/04/03(木) 21:15:07class A{
public:
void put( T t )
{
std::cout << t << std::endl;
}
};
このようなテンプレートを用意したとして、
A<int> a;
のようにintとして定義した場合に、put()にint以外の引数を
入れるとコンパイルエラーになるようにしたいんですが
a.put( 1.0f ); // 例えばこの場合コンパイルエラーが出るようにしたい
0307デフォルトの名無しさん
2008/04/03(木) 21:21:190308デフォルトの名無しさん
2008/04/03(木) 21:34:58class A{
public:
template<class T2>
void put( T2 t )
{
BOOST_STATIC_ASSERT(boost::is_same<T, T2>::value);
std::cout << t << std::endl;
}
};
0309デフォルトの名無しさん
2008/04/03(木) 22:00:35Windows APIは、#include <windows.h>で呼び出すことができるようなのですが、
ソフトウェア屋が作ったAPIをCのソースから呼び出す方法がさっぱり。
ググっては見たのですが具体的な書き方が見つかりませんでした。
参考になるサイト、もしくはソースがあれば教えてください。
0310デフォルトの名無しさん
2008/04/03(木) 22:02:400311デフォルトの名無しさん
2008/04/03(木) 22:04:05DLLを動的に呼び出すか、ソースなら#include ""だろ
0312デフォルトの名無しさん
2008/04/03(木) 22:06:51これが一体なになのかわかりません。コンパイルは出来ているのでつかえるみたいなのですが、、
ググってもいいのがひっかかりません。どうか教えてください。
0313デフォルトの名無しさん
2008/04/03(木) 22:20:15ソフトウェア屋が用意したAPI(恐らくDLL)を手元のCソースから利用したいんですが…
いまいちわからないです。C言語をやるのは初めてで。
0314デフォルトの名無しさん
2008/04/03(木) 22:22:13.lib をリンクして提供されてるヘッダファイルインクルードすればいいだけじゃね?
0315デフォルトの名無しさん
2008/04/03(木) 22:23:480316デフォルトの名無しさん
2008/04/03(木) 22:35:46空白を読み飛ばすマニピュレータのstd::ws
0317デフォルトの名無しさん
2008/04/03(木) 22:36:49OS/2やTOWNS-OSでもDLLだったけど生き残ったのはWindowsだけか
0318デフォルトの名無しさん
2008/04/03(木) 22:40:250319デフォルトの名無しさん
2008/04/03(木) 22:40:38なるほど…APIを触ったことがないのでどういうものかわかりませんでした。
ライブラリと同じような扱いでインクルードできるんですね。
ありがとうございました。
0320デフォルトの名無しさん
2008/04/03(木) 22:43:170321デフォルトの名無しさん
2008/04/03(木) 22:45:56ttp://e-words.jp/w/API.html
0322デフォルトの名無しさん
2008/04/03(木) 23:42:510323デフォルトの名無しさん
2008/04/03(木) 23:43:33(4,5) という文字列で入力するようになっていました。実装は()とかの括弧やコンマをみて
ちゃんと処理やってたのですが、普通に考えたら、4+5iとかの文字列の入力の方が自然なような
気がするのですが、(4,5)の方がよいという理由がありますか?
よろしくお願いします。
0324デフォルトの名無しさん
2008/04/03(木) 23:47:48a+biはC言語が対応していない
0325デフォルトの名無しさん
2008/04/04(金) 00:44:30コード解析するときってどうやってる?
Linux 環境で grep や vim + ctags で解析 → gdb で動作確認なんて
やり方してる俺は激しく時代遅れな希ガス
0326デフォルトの名無しさん
2008/04/04(金) 00:51:17動作させられるなら、動作させてみて、どの関数が一番頻繁に呼び出されてるかをみてみる。
全体の20%のコードが80%の時間を使ってるというしな。
0327デフォルトの名無しさん
2008/04/04(金) 01:06:04c言語が対応してないというのは、どういう意味ですか?
scanf()で一文字づつ読み込んで解析すればできませんか?
0328デフォルトの名無しさん
2008/04/04(金) 01:14:47文字列を解析すればできるよ
しかし、直接プログラム内で kansuu(x,y)とかけるのとは違う
0329デフォルトの名無しさん
2008/04/04(金) 01:15:14何がいいたいのかよくわからんが・・・
>complex x = 3 + 2i;
って使い方がしたいんじゃないのか?そいつぁ無理だ。(少なくともおれの知識じゃ)
なぜそこでscanfが出てくるのがさっぱりわからんが
>complex x = "3 + 2i";
なら、実装は可能だ。
ただ、種々の書式に対応するとめんどくさそうなことこの上ない実装になりそう。
0330デフォルトの名無しさん
2008/04/04(金) 01:15:480331デフォルトの名無しさん
2008/04/04(金) 01:22:17みたいな?w
0332デフォルトの名無しさん
2008/04/04(金) 01:35:28"1+2i"じゃなくて、"(1,2)"みたいに、実装してあるのは何で?
って質問だと思われw
0333デフォルトの名無しさん
2008/04/04(金) 01:54:54仕様なら仕方ないが信じがたいんだがw
0334デフォルトの名無しさん
2008/04/04(金) 01:58:38std::complex<double>(1, 3)
0335デフォルトの名無しさん
2008/04/04(金) 02:10:39"1+2i"じゃなくて"(1,2)"となっているのは何で?
ってことだろ。
0336335
2008/04/04(金) 02:12:00○ complexをiostreamで入出力するときに、
0337デフォルトの名無しさん
2008/04/04(金) 02:23:090338デフォルトの名無しさん
2008/04/04(金) 02:41:24というのがどういう意味だったのかはわかりました。
文字列で扱うんなら、4+5iとかでも問題ないと思ったのですが、(,)で実装してしまったし、、、
4+5iとかはちょっと面倒くさそう。
0339デフォルトの名無しさん
2008/04/04(金) 07:40:380340デフォルトの名無しさん
2008/04/04(金) 12:05:27そのポインタをlistにつっこんで
イテレータで走査しようとしたら怒られる
//Error
list<Hoge<T>*>::iterator it;
expected `;' before "it"
テンプレートクラスを
テンプレートのままぶち込むのがいけないのか、
それとも別のところがいけないのかでいいんで教えてください
0341デフォルトの名無しさん
2008/04/04(金) 12:30:31+ typename list<Hoge<T>*>::iterator it;
0342デフォルトの名無しさん
2008/04/04(金) 12:34:55ありがとー
0343デフォルトの名無しさん
2008/04/04(金) 12:35:00そりゃ型決まってないと無理でないか?
list<Hoge<int>*>::iterator it;
とかならいけると思うけど。
0344デフォルトの名無しさん
2008/04/04(金) 12:41:230345デフォルトの名無しさん
2008/04/04(金) 15:28:400346デフォルトの名無しさん
2008/04/04(金) 16:45:18言語を勉強したいのだが何がお勧め??
C++??Java??
0347デフォルトの名無しさん
2008/04/04(金) 16:46:17趣味なら何でもいいと思うよ。
0348デフォルトの名無しさん
2008/04/04(金) 16:47:57BASIC
0349デフォルトの名無しさん
2008/04/04(金) 16:51:06>>348
仕事でUNIXのオペレータをしています。
言語を覚えてスキルアップしたい。と思っています。
でも色んな言語がありすぎて何を始めればいいのか
分かりません。今の時代にあっていてこれからも使っていけそうな
言語を教えて下さい。お願いします。
0350デフォルトの名無しさん
2008/04/04(金) 16:53:20スレタイが読める程度の日本語。
0351デフォルトの名無しさん
2008/04/04(金) 16:53:45で、awk&sed、perl、python or rubyと進むとか。
0352デフォルトの名無しさん
2008/04/04(金) 16:57:410353デフォルトの名無しさん
2008/04/04(金) 16:58:140354デフォルトの名無しさん
2008/04/04(金) 16:59:02その逆などを教えて下さい。
0355デフォルトの名無しさん
2008/04/04(金) 17:03:38ここで聞いてもすれ違いのうえ端的だったり極端すぎる答えしか返ってこないよ
0356デフォルトの名無しさん
2008/04/04(金) 17:15:06http://pc11.2ch.net/test/read.cgi/tech/1200807067/
0357デフォルトの名無しさん
2008/04/04(金) 20:28:22ポインタを理解すること
http://builder.japan.zdnet.com/sp/c-programming-language/story/0%2C3800083430%2C20370255%2C00.htm
これができない奴はC/C++いじるの辞めろ
適正が0かマイナスだ
0358デフォルトの名無しさん
2008/04/04(金) 20:58:480359デフォルトの名無しさん
2008/04/04(金) 21:22:450360デフォルトの名無しさん
2008/04/04(金) 21:50:480361デフォルトの名無しさん
2008/04/04(金) 21:57:430362デフォルトの名無しさん
2008/04/04(金) 22:21:100363238
2008/04/04(金) 22:32:21無理ですよね・・・?
もし他のクラスのstatic変数なら大丈夫でしょうか?
0364デフォルトの名無しさん
2008/04/04(金) 22:36:38template<typename T> void hoge(const T &a) {
if (typeid(a) == typeid(int)) { ... }
}
とかやるんですかね
0365デフォルトの名無しさん
2008/04/04(金) 22:37:35その中のメンバ変数と言われると難しいというか、
そもそもそんな怪しい事しようとしている事にまず疑問を持たざるを得ない。
0366デフォルトの名無しさん
2008/04/04(金) 22:38:45dynamic_cast も RTTI を利用してる。
typeid はあまり使う事は無いな。
0367デフォルトの名無しさん
2008/04/04(金) 22:54:271. ライブラリの用意した基底クラスBから派生した自作クラスDを作る。
2. Dのインスタンスをライブラリに渡す。
3. ライブラリからのコールバックで2で渡したものがB型への参照・ポインタで与えられる。
この例だと結局boost::polymorphic_downcastにするんだけどね。
>>364
その例だったら特殊化で十分。
0368デフォルトの名無しさん
2008/04/04(金) 23:00:11Hoge Piyo::(&foo)[][100];
じゃないの・・・?
0369デフォルトの名無しさん
2008/04/04(金) 23:05:510370デフォルトの名無しさん
2008/04/04(金) 23:09:04多態とか
0371デフォルトの名無しさん
2008/04/04(金) 23:09:500372デフォルトの名無しさん
2008/04/04(金) 23:58:47クラスがメンバに参照を持つとコンテナに突っ込めなくなってしまうので、
嫌でもポインタ使わなきゃならないと思うんだけど。
0373デフォルトの名無しさん
2008/04/05(土) 00:07:58360は何を言いたかったのだろう
0374デフォルトの名無しさん
2008/04/05(土) 00:08:53scoped_ptr くらいなら何とかなるんじゃね?
0375デフォルトの名無しさん
2008/04/05(土) 00:15:570376デフォルトの名無しさん
2008/04/05(土) 00:17:42ポインタわからないようではC++できないというのは真実だと思うけど
0377デフォルトの名無しさん
2008/04/05(土) 01:24:510378デフォルトの名無しさん
2008/04/05(土) 03:16:18どういう方法がありますか?
こういうのです
class Test {
private:
char data[256];
public:
char * getStr()
{
char *ret = new char[3];
ret[0] = data[0];
ret[1] = data[1];
ret[2] = data[2];
return ret;
}
};
これを
std::string str = getStr();
このように使った場合retのデリートができないので
メモリリークしますよね?何かいい方法ありませんか?
0379デフォルトの名無しさん
2008/04/05(土) 04:35:020380デフォルトの名無しさん
2008/04/05(土) 06:48:360381デフォルトの名無しさん
2008/04/05(土) 08:04:560382デフォルトの名無しさん
2008/04/05(土) 08:49:39str.assign(data, 3);
}
std::string getStr() const {
return std::string(data, 3);
}
後者は代入する時にコピーが発生するので場合によっては効率悪いが
(初期化の場合は大抵のコンパイラなら戻り値最適化してくれるので大抵コピーは発生しない)、
かといって前者は必ず変数用意しないといけない。
どっちにするか、あるいは両方用意するかはお好きなように。
まあ、string にどんなメンバがあるかくらい見とけ。
http://www.wakhok.ac.jp/~sumi/stl/header/string.html
0383デフォルトの名無しさん
2008/04/05(土) 10:43:49参照のようなconstなメンバー変数を持つとコピーコンストラクタが書けない
一方ほとんどのコンテナはメモリ確保を自動でするからコピーが発生する
常識だと思ってたんだけどどこかおかしいのか
0384デフォルトの名無しさん
2008/04/05(土) 10:53:240385デフォルトの名無しさん
2008/04/05(土) 11:06:11書けないのは代入演算子。
0386デフォルトの名無しさん
2008/04/05(土) 12:09:51サンプルで\0を使っているコードを\0消しても正常に動作するんですが。
0387デフォルトの名無しさん
2008/04/05(土) 12:14:40これってどうすれば解決できるんでしょう?
箇所は
vsprintf(unsigned char*,const char*,va_list);
って使ってるところなんですが、unsignedのポインタからsignedのポインタにはキャストできないって言われたし・・・
0388デフォルトの名無しさん
2008/04/05(土) 12:14:41コードによる。サンプル晒せ。
実はどこかで\0が付いているだけかもしれない。
0389386
2008/04/05(土) 12:28:09これです。
int CreateSave() {
HANDLE hFile;
SYSTEMTIME st;
TCHAR szTime[128];
TCHAR *lpszBuf;
DWORD dwAccBytes;
DWORD dwSize = 0L;
HGLOBAL hMem;
DWORD dwLen;
GetLocalTime(&st);
wsprintf(szTime,_T("\r\nファイル作成時: %d年%02d月%02d日%02d時%02d分%02d秒"),
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
dwLen = (DWORD)lstrlen(szTime);
0390386
2008/04/05(土) 12:28:48hFile = CreateFile(_T("ファイルログ.txt"),GENERIC_READ, 0, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
dwSize = GetFileSize(hFile, NULL) + dwLen;
hMem = GlobalAlloc(GHND, sizeof(TCHAR) * dwSize + 1);
lpszBuf = (TCHAR*)GlobalLock(hMem);
ReadFile(hFile, lpszBuf, dwSize, &dwAccBytes, NULL);
CloseHandle(hFile);
lstrcat(lpszBuf, szTime);
lpszBuf[dwSize] = '\0';
hFile = CreateFile(_T("ファイルログ.txt"), GENERIC_WRITE, 0,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(hFile, lpszBuf, (DWORD)lstrlen(lpszBuf), &dwAccBytes, NULL);
CloseHandle(hFile);
GlobalUnlock(hMem);
GlobalFree(hMem);
return -1;
}
0391デフォルトの名無しさん
2008/04/05(土) 12:30:09(const signed char *)にキャスト
0392デフォルトの名無しさん
2008/04/05(土) 12:50:12よく読んでないけどstrcat(lpszBuf, szTime);この時点で¥0がついてると思われ
0393デフォルトの名無しさん
2008/04/05(土) 12:58:53constってことは第2引数にですよね?やったら同じエラーが2個に増えたんですけど・・・
0394デフォルトの名無しさん
2008/04/05(土) 12:59:590395デフォルトの名無しさん
2008/04/05(土) 13:04:11だから const const charがあるだろ
0396デフォルトの名無しさん
2008/04/05(土) 14:33:43lpszBuf = (TCHAR*)GlobalLock(hMem);
ReadFile(hFile, lpszBuf, dwSize, &dwAccBytes, NULL);
CloseHandle(hFile);
lstrcat(lpszBuf, szTime);
lpszBuf[dwSize] = '\0';
このあたりか。
何か無茶苦茶危険なコードに見えるんだけど。
hMem = GlobalAlloc(GHND, sizeof(TCHAR) * dwSize + 1); ← dwSize 文字分のメモリを確保してるつもりのようだが、+1 の位置がおかしい(TCHAR が2バイトの時に領域が足りない)
lpszBuf = (TCHAR*)GlobalLock(hMem);
ReadFile(hFile, lpszBuf, dwSize, &dwAccBytes, NULL); ← dwSize 読み込む
CloseHandle(hFile);
lstrcat(lpszBuf, szTime); ← '\0' を付けないまま lstrcat は危険というか、szTime の文字数分領域がさらに必要なんだけどその領域を確保すらしていない
lpszBuf[dwSize] = '\0'; ← lstrcat の前に行う
0397デフォルトの名無しさん
2008/04/05(土) 14:35:010398デフォルトの名無しさん
2008/04/05(土) 14:41:08影響を受けるというのは良くない場合のほうが多いと思うけど、
それはいいのか?
0399デフォルトの名無しさん
2008/04/05(土) 15:57:43if( n % 2 )
printf( "奇数です\n" );
else
printf( "偶数です\n" );
奇数か偶数か調べるもっともスマートなコードってどんなんですかね?
0400デフォルトの名無しさん
2008/04/05(土) 15:59:38if( isOdd(n) )
printf( "奇数です\n" );
else
printf( "偶数です\n" );
0401デフォルトの名無しさん
2008/04/05(土) 16:00:21スマートが短いって意味なら、いろいろあるだろうけど。
0402デフォルトの名無しさん
2008/04/05(土) 16:00:430403デフォルトの名無しさん
2008/04/05(土) 16:07:03スマートといえるかわからんけど
0404デフォルトの名無しさん
2008/04/05(土) 16:08:360405デフォルトの名無しさん
2008/04/05(土) 16:09:050406デフォルトの名無しさん
2008/04/05(土) 16:10:520407デフォルトの名無しさん
2008/04/05(土) 16:23:000408デフォルトの名無しさん
2008/04/05(土) 17:00:52どちらも最初の位置を返すと思うんですが
0409デフォルトの名無しさん
2008/04/05(土) 17:04:02find_first_ofはコンテナから特定のコンテナの要素を見つける。
0410デフォルトの名無しさん
2008/04/05(土) 17:21:25std::string::size_type find = str.find_first_of("abc");
"abc"のうち一番最初に見つかった要素の位置を返す
コンパイルが通るかは試してないのでわからん
0411デフォルトの名無しさん
2008/04/05(土) 18:17:44以下のような二つのコードの時間を計ってみたら、
コードBの方が早く、コードAはすさまじく重くなりました。
なぜでしょうか?
あと、コードAの方で、変数aをデバッグで値を見ると、
1.731e-040#DEN のように表示されます。
#DENとは何なんでしょうか?
よろしくお願いします。
環境はVisual c++ 2005です。
//コードA
for(int i =0; i< 5000; i++){
float a = 1.731e-040f;
float b = 1.731e-040f;
float the_test = a*b;
}
//コードB
for(int i =0; i< 5000; i++){
float a = 0.1f;
float b = 0.1f;
float the_test = a*b;
}
0412デフォルトの名無しさん
2008/04/05(土) 18:31:22DENormal number (非正規化数)
FPUによっては非正規化数の演算をサポートしてなくて、
これをソフトウェア側でエミュレートしてる場合がある。
すると、パフォーマンスが落ちる原因になる。
0413じじ
2008/04/05(土) 18:57:43ですが、APPクラスの子レッドとしておくのがいいのでしょうか?
0414デフォルトの名無しさん
2008/04/05(土) 19:17:300415デフォルトの名無しさん
2008/04/05(土) 20:03:42すぱげってぃーなコードになってしまう。やっぱり慣れるしかない?
以下サンプル
void binary_search(double x,double y,double *z)
{
int i;
double c,j;
j = 0.0000001;
for(i=0;y*y - 2 > j;i++)
{
if(x*x - 2 < 0 && y*y - 2 > 0)
{
c = (x+y)/2;
if(c*c - 2 > 0) y = c; else x = c;
}
binary_search(x,y,z);
}
*z = x;
}
再帰しまくりでサーセン。でもどうやったら再帰せずに実現できるだろう?
考えるのが面倒&考えても良く分からないので再帰に走る今日この頃。
0416デフォルトの名無しさん
2008/04/05(土) 20:04:370417デフォルトの名無しさん
2008/04/05(土) 20:11:040418デフォルトの名無しさん
2008/04/05(土) 20:12:39何がしたいんだよ?
binary_search(x,y,z);
↓
//binary_search(x,y,z);
0419デフォルトの名無しさん
2008/04/05(土) 20:21:12変数一文字でコメントもなくて通じると思ってるんだろうか
0420デフォルトの名無しさん
2008/04/05(土) 20:29:23恥ずかしい。。。。鬱だしのう orz
0421デフォルトの名無しさん
2008/04/05(土) 22:55:05http://pc11.2ch.net/test/read.cgi/prog/1191638525/43-44
くずばっかw
0422デフォルトの名無しさん
2008/04/05(土) 23:05:51すまん、記事のコメントと同じ事をいいたいのか
それとも、2ページ目の解説についていいたいのか
さっぱり分からないから、ちゃんと説明してくれないか?
0423デフォルトの名無しさん
2008/04/05(土) 23:06:44o IBM
0424デフォルトの名無しさん
2008/04/05(土) 23:37:02double operator[][](int x, int y)
のような書き方は出来ないみたいなので、(コンパイル失敗しました)、
この場合どうすればいいでしょうか?
0425デフォルトの名無しさん
2008/04/05(土) 23:47:1350万番目のiteratorを取得するのにiterator++ を50万回呼ぶ以外の方法はないのでしょうか。
vector<int>::iterator it=vec.begin()+vec.size()/2
とかいう感じだと演算子+は定義されていない、とかでダメなもんで。
この辺がポインタとの違いかなとは思うのですが。
0426デフォルトの名無しさん
2008/04/05(土) 23:50:060427デフォルトの名無しさん
2008/04/05(土) 23:54:19std::advance
というか、+ は定義されているはずなのだが、
どんなコンパイラ使ってるの?
0428デフォルトの名無しさん
2008/04/05(土) 23:54:52コンパイラ何使ってるの?
vector のイテレータはランダムアクセスイテレータのはずだから、
コンパイラの実装がおかしいだろ、それは。
0429デフォルトの名無しさん
2008/04/05(土) 23:55:08vector<int>::iterator it= &vec[vec.size()/2];
みたいな感じでできないか?
0430デフォルトの名無しさん
2008/04/06(日) 00:01:240431デフォルトの名無しさん
2008/04/06(日) 00:08:31プログラムについての知識0です。
勉強したいとかではなくこのソフトがほしいだけです。
Microsoft Visual C++ 2008をとりあえずインストールしましたがやり方がまったくわかりません。
サルにも判るように教えてくれる方がいれば幸いです。
ttp://www.pcsx2.net/files/10490
ttp://pcsx2.svn.sourceforge.net/viewvc/pcsx2/pcsx2/GS.cpp?view=markup&pathrev=346
0432425
2008/04/06(日) 00:10:230433デフォルトの名無しさん
2008/04/06(日) 00:23:40ランダムアクセスイテレータはポインタ互換だと勘違いしてた
そういう実装が多いだけか
0434デフォルトの名無しさん
2008/04/06(日) 00:25:07使用可能な演算子はポインタと同じだが、
ポインタとの間で相互変換することはできない。
0435デフォルトの名無しさん
2008/04/06(日) 00:26:140436デフォルトの名無しさん
2008/04/06(日) 01:01:40プロキシクラスを返す。
class A
{
public:
class Proxy
{
public:
double operator[](int y);
};
Proxy operator[](int x);
};
0437デフォルトの名無しさん
2008/04/06(日) 01:06:20範囲チェックしたければ何かクラス返すことになると思うけど。
0438デフォルトの名無しさん
2008/04/06(日) 10:48:56スレ違いだということ、サルでも分かるかな?
0439411
2008/04/06(日) 12:00:53回答ありがとうございます。
遅くなる原因がわかり、勉強になりました。
ありがとうございました。
0440デフォルトの名無しさん
2008/04/06(日) 12:57:53ありがとうございます。
以下のような実装でいいですか? (あまりスッキリしてないような、、)
class test {
public:
test(int arg_size);
struct Proxy {
Proxy(int arg_size) : size(arg_size) {
vec.assign(size, 0.0);
}
double &operator[](int y) {
return vec[y];
}
std::vector<double> vec;
int size;
};
Proxy &operator[](int x) {
return proc_vec[x];
}
std::vector<Proxy> proc_vec;
int size;
};
0441デフォルトの名無しさん
2008/04/06(日) 13:36:200442デフォルトの名無しさん
2008/04/06(日) 14:08:590443デフォルトの名無しさん
2008/04/06(日) 14:11:20なるほど、たしかに全然すっきり書けますね。
メンテもしやすそうだし、こっちにします。
ありがとうございます。
class Matrix {
public:
Matrix(int arg_size) : size(arg_size) {
vec.assign(size, std::vector<double>(size));
}
std::vector< std::vector<double> > vec;
int size;
double &operator()(int x, int y) {
return vec[x][y];
}
};
0444デフォルトの名無しさん
2008/04/06(日) 14:18:34440でもそうだったけど、size変数って不要じゃね?
0445デフォルトの名無しさん
2008/04/06(日) 15:13:16更にで何だけど、要素数のパターンが少なくて、定数でしか使わないなら要素数テンプレートにしちゃうと
ベクターも使わずに済むが・・・
用途分からんからしらね
0446デフォルトの名無しさん
2008/04/06(日) 15:15:45ってどういう意味のエラーですか?
0447デフォルトの名無しさん
2008/04/06(日) 15:21:22宣言だけされてて関数が定義されていない。
0448デフォルトの名無しさん
2008/04/06(日) 15:34:25どうやるんですか?
要素は、二次元ベクトルなんですが、1000×1000要素くらいです。
0449デフォルトの名無しさん
2008/04/06(日) 15:36:35プロジェクトのリンクするライブラリの設定で
必要な関数入ったLIBファイルを設定しわすれてるんじゃない
0450デフォルトの名無しさん
2008/04/06(日) 15:37:08その通りですね。
size変数は消します。
0451デフォルトの名無しさん
2008/04/06(日) 15:46:43vectorの要素数って変わるの?
0452デフォルトの名無しさん
2008/04/06(日) 16:25:26横レスだが、こういうことだと思う。
template<int size_x, int size_y> class Matrix {
public:
double& operator()(int x, int y) { return v_[x][y]; }
private:
double v_[size_x][size_y];
};
1000×1000は大きいので、スタックには置けないけど。
0453デフォルトの名無しさん
2008/04/06(日) 16:43:030454デフォルトの名無しさん
2008/04/06(日) 17:00:200455デフォルトの名無しさん
2008/04/06(日) 17:02:130456デフォルトの名無しさん
2008/04/06(日) 17:13:54・サイトにアクセスしてページを入手する
・ページを加工する
・自サイトに貼り付ける
WebProg板へどうぞ。
0457デフォルトの名無しさん
2008/04/06(日) 17:32:48エラー 2 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません application.cpp 7
エラー 3 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません application.cpp 7
エラー 4 error C2371: 'frm' : 再定義されています。異なる基本型です。 application.cpp 7
>>449
>>447
解決しました。
が、今度はこんなエラーが。
定義はしたんですが、今度は定義した場所でエラー吐くようになりました。
0458デフォルトの名無しさん
2008/04/06(日) 17:52:08>>54-
0459デフォルトの名無しさん
2008/04/06(日) 19:44:31名前空間をちゃんと指定してなかったのが原因でした。
0460デフォルトの名無しさん
2008/04/07(月) 02:21:47分けた方がええの?
分ける理由ってなんですか?
0461デフォルトの名無しさん
2008/04/07(月) 02:41:53定義のほうをあらかじめコンパイルしてオブジェクトにしとける
小さいなら定義も一緒でいいだろ
boostとかにもそういうのあるよ
0462デフォルトの名無しさん
2008/04/07(月) 02:46:51プログラムサイズが増えたり重複オブジェクトができたりコンパイルが通らなかったりする
0463デフォルトの名無しさん
2008/04/07(月) 02:49:170464デフォルトの名無しさん
2008/04/07(月) 02:54:18>>460
たとえば、計10万行くらいあるソースファイル群のすべてが
直接or間接的にhoge.hppというヘッダファイルをincludeしているとして、
hoge.hppが実装まで全部書いてあるモノだったとすると、
その実装部分をほんの1行変更しただけで、10万行のソースファイル群が
すべて再コンパイルされることになる。
定義を別ファイルにしておけば、変更したときに再コンパイルするのはそのファイルだけで済む。
0465デフォルトの名無しさん
2008/04/07(月) 04:53:140466デフォルトの名無しさん
2008/04/07(月) 04:59:010467デフォルトの名無しさん
2008/04/07(月) 06:43:59Linux板へどうぞ。ulimitでできるでしょ。
>>466
前者は文字通りGlobal。後者はファイルスコープなので違う翻訳単位からは見えない。
どちらにしても、可能な限り使わないに越したことはない。
0468デフォルトの名無しさん
2008/04/07(月) 07:14:53>>463
>>462
>>461
ありがとう。
なんとなくわかった。
0469デフォルトの名無しさん
2008/04/07(月) 07:45:15ヘッダに関数書くときに、static付けたり、ファンクタにしたり、テンプレートにしたりすると、
どういう点でいいですか?全然考えてませんでした。
0470デフォルトの名無しさん
2008/04/07(月) 07:59:530471デフォルトの名無しさん
2008/04/07(月) 12:23:30【目的】
街中をオニが駆け巡ります。
オニは聖火を持って移動します。これを消すのが目的です。
ただし、今回は参加者が多いため難易度がはね上がりました。
今回のみ、オニは壁役に守られながら走ります。
壁役を突破して聖火を消せばゲームクリアとなります。
【ルール】
〜勝ち〜
オニが持っている聖火を消すとその時点でゲームクリアとなります。
〜負け〜
オニが若里公園まで逃げ切るとその時点でゲームオーバーとなります。
【日時 】 2008年4月26日(土)8:30スタート
【場所 】 長野県長野市
【ルート地図】 ttp://www.city.nagano.nagano.jp/upload/1/taiiku_lane.pdf
【詳細情報 】 ttp://www.joc.or.jp/beijing/torchrelay/index.html
-------------------------------------------------------------
イギリスで行われたイベントの様子
ttp://jp.youtube.com/watch?v=1-KMVWRFLes
フランスで行われたイベントの様子(1分30秒から)
ttp://jp.youtube.com/watch?v=9mYEtkW2bsw
『2ch大規模OFF会場』
ttp://sports11.2ch.net/test/read.cgi/offmatrix/1207495088/
ttp://sports11.2ch.net/test/read.cgi/offmatrix/1207418064/
『各国の競技結果』
ttp://ja.uncyclopedia.info/wiki/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0%E3%83%BB%E8%81%96%E7%81%AB%E3%83%AA%E3%83%AC%E3%83%BC
0472デフォルトの名無しさん
2008/04/07(月) 18:43:10char でも int でも double でもしてくれるが、
それってコンパイル時に適切にマシン語に変換してくれてるんですか?
CPUが持ってる算術演算の機能を使えるように
置き換えてるのであってCPUが int なのか char なのか判断して
処理してるわけではないですよね?
0473デフォルトの名無しさん
2008/04/07(月) 18:51:06そうだよ
ないです
0474デフォルトの名無しさん
2008/04/07(月) 19:12:350475デフォルトの名無しさん
2008/04/07(月) 20:03:560476デフォルトの名無しさん
2008/04/07(月) 22:26:22自分なりに作ろうと思っているのですが、いきなり行き詰ってしまいました;
整数の場合8桁、負数の場合9桁、エラー仕様など、問題が山積みですが、
どうかご教授お願いします。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6203.txt
0477476
2008/04/07(月) 22:28:200478デフォルトの名無しさん
2008/04/07(月) 22:41:06何がしたいんだ?宿題をといて自分なりに課題を拡張して勉強しようとしたのか?
そのテキストファイルを見せられても、課題を丸投げされているようにしか見えないが。
とりあえずバッファオーバーフローしてたり、いろいろまずいぞ。
0479デフォルトの名無しさん
2008/04/08(火) 10:55:17この動画でやっている、画像ファイルをテキスト(AA)に変換は
どのようにやっているのですか?
0480デフォルトの名無しさん
2008/04/08(火) 11:03:120481デフォルトの名無しさん
2008/04/08(火) 11:08:11画像の上から順にパターン解析と文字割り当てを行う。
って感じしか思い浮かばん
0482デフォルトの名無しさん
2008/04/08(火) 11:08:35初心者なもので・・・
画像を読み込んで、テキストに変換してさらにそれの色を判別してつけるのは
どの辺のコードを見たら良いのでしょうか?
0483デフォルトの名無しさん
2008/04/08(火) 11:19:20BMPのフォーマット↓凄く簡単だからすぐできるはず。
ttp://www.kk.iij4u.or.jp/~kondo/bmp/
後は色に合わせて<font color="色">■</font>をひたすら出力すればできるだろ。
中級入門くらいじゃね?動かしたいならJavaScriptの解説かじればおk
0484デフォルトの名無しさん
2008/04/08(火) 12:38:37とりあえず、どのあたりで困ってるのかな。?
mainに全部書くのではなく関数を作ってみよう。
引数をまとめれば、何をするべきかわかるんじゃないかな。
0485デフォルトの名無しさん
2008/04/08(火) 12:43:09これってどういう意図なのでしょう。
一般的なルールなのか、特定の状況で有効な話だったのか……。
0486デフォルトの名無しさん
2008/04/08(火) 12:47:03コンストラクタ内で例外が発生すると、デストラクタは呼ばれない (仕様)
→ new でコケたらリーク!
じゃね?
コンストラクタ内の例外は漏れなくコンストラクタ内で処置すれば無問題。
0487デフォルトの名無しさん
2008/04/08(火) 13:04:20お絵かきとかでもあるネタだけど、むしろどうやって動画にしてる
のかの方が気になる。コーディング中ずっと録画してあとで編集
してるんだろうが…根性あるなw
0488デフォルトの名無しさん
2008/04/08(火) 13:17:33↓
動画を取りながら記録したキータイプをマクロで動かす
↓
(`゚'Д`゚')
0489デフォルトの名無しさん
2008/04/08(火) 13:24:03画像を読み込んで表示するところから始めたらいい
結構親切っぽいから彼のサイトの掲示板で聞いてみれば
講座の方はかなり酷いスパゲティコードだからお勧めしないw
0490デフォルトの名無しさん
2008/04/08(火) 16:01:19ttp://weblearningplaza.jst.go.jp/cgi-bin/user/top.pl?next=lesson_list&type=simple&field_code=40&course_code=585
0491デフォルトの名無しさん
2008/04/08(火) 18:21:58以下のコードでよいですか?Macだとうごくのですが、windowsでもこれでいいのかわかりません。
double a;
std::cin >> a;
if (std::cin.peek() == '\n') {
// 数字は一個だった
}
else {
// 一個じゃなかった。
}
0492デフォルトの名無しさん
2008/04/08(火) 18:48:09やってみりゃいいじゃない。
0493デフォルトの名無しさん
2008/04/08(火) 19:06:50ありがとうございます。今手元にwindowsがないのです。
また、自分のところのwindowsでやってみて動いても、ほかの人のwindowsでは
どうなるかわからないし…
その、規格的に入力の文字列末判定はこれでいいのかどうか、知り痛いです。
0494デフォルトの名無しさん
2008/04/08(火) 19:10:04VC8で大量にメモリの確保しているとコンストラクタの中のnewで「メモリが不足しています。」とエラーがでる。
理由が分からずallocにしたら問題なかった。
というか今も原因が掴みきれない件。
0495デフォルトの名無しさん
2008/04/08(火) 19:20:20MyTemplate<型名>をtypedefしてしまえば良いような気がするけど
これってありなんですかね?
0496デフォルトの名無しさん
2008/04/08(火) 19:38:160497デフォルトの名無しさん
2008/04/08(火) 20:08:28つボラギノール
0498デフォルトの名無しさん
2008/04/08(火) 21:56:33あり。
0499デフォルトの名無しさん
2008/04/08(火) 21:59:560500デフォルトの名無しさん
2008/04/08(火) 22:04:320501デフォルトの名無しさん
2008/04/08(火) 22:05:120502デフォルトの名無しさん
2008/04/08(火) 22:14:190503デフォルトの名無しさん
2008/04/08(火) 22:23:500504476
2008/04/08(火) 22:28:39ですよね、失礼しました;
>>484様
エラー仕様を作ろうとしたのですが、
【整数の場合最大8桁までを有効とし、9桁以降を無視する。
負数の場合は、最大9桁までを有効とし、10桁目以降は無視する。】とあり、
【『−』のみ、または改行のみ入力されたらエラーメッセージを表示し、終了】
というのもあるので、
エラーとしては if(a[0]=='\n') if(a[1]=='-' && a[0]=='\n')
みたいなのを使えばいいのかなぁ、程度で考えてるのですが、
どこに入れればいいのかなどイマイチ判らないのです;
0505デフォルトの名無しさん
2008/04/08(火) 22:34:190507デフォルトの名無しさん
2008/04/08(火) 22:54:05なるほどー例外ですか。それは思い浮かばなかった。
newしたときの初期化の処理が無駄だったりするのかとか当時考えたのを思い出した。
0508デフォルトの名無しさん
2008/04/08(火) 23:02:41whileを抜けて
>if(a[0]=='\n') if(a[1]=='-' && a[0]=='\n')
の場合にreturnで終わればOK
returnの前にprintfで適当にエラー出せば目的のものになるだろ。
>どこに入れればいいのかなどイマイチ判らないのです;
どこに入れてダメだったんだ?
0509デフォルトの名無しさん
2008/04/08(火) 23:09:470510デフォルトの名無しさん
2008/04/08(火) 23:19:280511デフォルトの名無しさん
2008/04/09(水) 03:14:20以下のコード。
COORD coord;
HANDLE hConsoleStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hConsoleStdOut, coord);
は、<windows.h>をインクルードして使える、というのは判断できますが、
これはwindowsプログラミングなのでしょうか?
WinMain()関数も無いし、DOSで表示されるのですが、
こういったコードの総称は何と呼ばれているのですか?
説明下手で申し訳ないです。
0512デフォルトの名無しさん
2008/04/09(水) 03:17:270513デフォルトの名無しさん
2008/04/09(水) 03:39:45(MS-)Windowsプログラミングだな。
ついでに言えば、コンソールウィンドウはDOSではない。
0514デフォルトの名無しさん
2008/04/09(水) 04:02:03>>513
ありがとうございます。
この「COORD coord;」や「HANDLE」の意味が解らず、
じゃあ総称が判ればネットで検索できる、と思い至ったのですが、
ネットを見ても、C言語による(MS-)Windowsプログラミングが掲載されていないんですよね。
はぁ。。。
0515デフォルトの名無しさん
2008/04/09(水) 05:19:59日本語訳は無いけどMSDNに載ってるよ。
0516Alexander The Great WAS ALBANIAN, the PROOF by Flamuri
2008/04/09(水) 06:53:320517デフォルトの名無しさん
2008/04/09(水) 07:30:25ちゃんと delete すれば問題ない。
例外を一旦コンストラクタ内でキャッチして delete するのもいいが、
スマートポインタに入れておけばあとはデストラクタが勝手に何とかしてくれる。
コンストラクタ内で例外が発生した場合に呼ばれないデストラクタは
構築中のオブジェクトのデストラクタだけだからね。
既に構築されたオブジェクトのデストラクタは全て呼ばれる。
例えば基底クラスのデストラクタとか
構築されたメンバ変数のデストラクタとかは全て呼ばれる。
new に関して気をつける必要があるのは事実だけど、
使っていけないってことはあり得ない。
まあ、初心者は使わない方が無難ってこと程度の話じゃないのかな。
0518デフォルトの名無しさん
2008/04/09(水) 09:01:290519デフォルトの名無しさん
2008/04/09(水) 09:26:43呼び出すときはstack unwindを考えて対応する。
0520デフォルトの名無しさん
2008/04/09(水) 09:32:36そのあと何をすれば良いのですか?
0521デフォルトの名無しさん
2008/04/09(水) 09:38:26ケースバイケース
スワップが頻発してるなどメモリ不足でシステムがヤバイ状態なら
終了してシステム全体のシステムの再考。
そのエラーを無視してでも少しでも長く生き続ける必要が条件なら
ログにでも吐いて続行。
0522デフォルトの名無しさん
2008/04/09(水) 11:47:43ListBoxの1行削除ができたので、今度は削除前に
メッセージボックスを出して見ようとしたのですが、
エラーがものすごい数出てしまいました。
System::Windows::Forms::DialogResult result;
result = MessageBox::Show("削除しますか?","DELETE CHECK",MessageBoxButtons::YesNo);
Debug::WriteLine(result);
if(result != System::Windows::Forms::DialogResult::Yes)){
return;
}
if文全体を削除すると問題なく動作し、
また、出力ではYes,No確認できるので、
if文のSystem::Windows::Forms::DialogResult::Yesが、
問題なのかと思い、"Yes"とかにしてみたのですがやはりエラーが出てしまいます。
これはなぜエラーが出てしまうのでしょうか
0523デフォルトの名無しさん
2008/04/09(水) 11:56:41それコンストラクタ関係ないだろ。
0524デフォルトの名無しさん
2008/04/09(水) 12:00:08それ.netじゃん
AfxMessageBoxかAPIのMessageBox使うべし
0525デフォルトの名無しさん
2008/04/09(水) 12:03:48コンストラクタ内で catch なんて書かないでいいように RAII を徹底したほうがいい。
0526デフォルトの名無しさん
2008/04/09(水) 12:14:47ひと目でわかる Microsoft Visual C++ 2008 アプリケーション開発入門
という本を読みながらやっていて、
本書はC++/CLIで書いてある。とあるので、たぶん.netというやつだとおもいます。
この本の通りにやるとエラーが出てしまい、
エラーの内容見てもよく分からなくて、
いろいろ試してたのですが、結局原因が分からず聞いてみました。
この本で使っているMessageBoxにはなにか問題があったりするんでしょうか
0527デフォルトの名無しさん
2008/04/09(水) 12:21:41C++/CLIてのはC++でなんとか.net使いましょうよ・・・っていう仕様
.netだけならC#の方がいいし、速度的にC++ならC++/CLIしないでMFCかAPI使った方がいい
0528522
2008/04/09(水) 12:30:18if(result != System::Windows::Forms::DialogResult::Yes)){
かっこが一つ多かったです・・・スレ汚しすみませんでした。
>>527
うう、本まで買って気合い入れてしまったため再スタートは辛いです。
とりあえずこの道進んで、あとから徐々に方向転換してみます。
ありがとうございました。
0529デフォルトの名無しさん
2008/04/09(水) 12:33:15C++/CLIなら↓の方で聞いた方がいいよ
C++/CLI part3
http://pc11.2ch.net/test/read.cgi/tech/1206447234/
0530デフォルトの名無しさん
2008/04/09(水) 15:29:32甘いな。俺は最初どの本買ったらいいかわかんなくて結局3冊目まで買ったぞ
0531デフォルトの名無しさん
2008/04/09(水) 15:36:050532デフォルトの名無しさん
2008/04/09(水) 15:44:23きみのPCのMFC関連のDLL等を全て削除して使用してみればきみの環境での依存度が分かる
0533デフォルトの名無しさん
2008/04/09(水) 15:46:40滑ってるよ
0534デフォルトの名無しさん
2008/04/09(水) 15:52:500535デフォルトの名無しさん
2008/04/09(水) 17:07:16(俺のアプリは)
0536デフォルトの名無しさん
2008/04/09(水) 17:14:37WinExec((LPCSTR)(LPCTSTR)m_combo,SW_SHOW);
これアプリが起動しないんですけどなんでですか
0537デフォルトの名無しさん
2008/04/09(水) 17:23:00LPCTSTRを引数に取るShellExecuteか何かを使え。
0538デフォルトの名無しさん
2008/04/09(水) 17:30:010539デフォルトの名無しさん
2008/04/09(水) 17:33:34あと、引数の少なさなら<tchar.h>の_tsystemがいいぞ。
0540デフォルトの名無しさん
2008/04/09(水) 17:35:330541デフォルトの名無しさん
2008/04/09(水) 17:37:24int a;
int b;
};
struct hoge_b : public a{
int c;
int d;
};
としたとき、hoge_aのメンバのメモリ上の並び順はabとなるのは保証(規定)されていると
どこかで見た記憶があるのですが、hoge_bの場合、abcdとなることは保証されるのでしょうか?
0542デフォルトの名無しさん
2008/04/09(水) 17:54:09動いたwお前すごいわ
どこにも乗ってなかったぞこんなの
0543デフォルトの名無しさん
2008/04/09(水) 18:27:430544デフォルトの名無しさん
2008/04/09(水) 18:32:25No
0545デフォルトの名無しさん
2008/04/09(水) 18:42:27コンパイラですか?それともOSですか?
AMDとintelのようにCPUが変わっただけでもダメですか?
0546デフォルトの名無しさん
2008/04/09(水) 18:44:58時間と空間を使えばかなりランダムになりそうだけどなぁ。
0547デフォルトの名無しさん
2008/04/09(水) 19:10:37移植性を考えるなら同じ種で同じ乱数列の出力を保証するにはライブラリに頼らず乱数発生器も実装してしまう
0548デフォルトの名無しさん
2008/04/09(水) 19:46:10オブジェクトを作らずにメンバ関数を呼び出すことは可能でしょうか。
0549デフォルトの名無しさん
2008/04/09(水) 19:49:190550デフォルトの名無しさん
2008/04/09(水) 19:54:24できる。
struct a{ void f(){} };
reinterpret_cast<a*>(NULL)->f();
0551デフォルトの名無しさん
2008/04/09(水) 20:06:20レスありがとうございました。
#include <stdio.h>
class A
{
public:
static A* make_obj(void);
void my_puts(void){ puts("Hello\n"); }
};
A* A::make_obj(void){
A* a = new A;
return a;
}
int main()
{
A* a = A::make_obj();
a->my_puts();
return 0;
}
0552デフォルトの名無しさん
2008/04/09(水) 20:12:24やめなさい
0553デフォルトの名無しさん
2008/04/09(水) 20:36:54わかってると思うけど生ポではなくスマポに入れて返しとけよ
0554デフォルトの名無しさん
2008/04/09(水) 21:09:35は取り消せますか?
0555デフォルトの名無しさん
2008/04/09(水) 21:16:28using は計画的に。
0556デフォルトの名無しさん
2008/04/09(水) 21:24:070557デフォルトの名無しさん
2008/04/09(水) 21:27:350558デフォルトの名無しさん
2008/04/09(水) 21:30:57staticメンバ関数が無い時代の苦肉の策ですなあ。
ただ非静的メンバーは参照できない。
0559デフォルトの名無しさん
2008/04/09(水) 21:31:500560デフォルトの名無しさん
2008/04/10(木) 00:22:01そのまま<windows.h>をインクルードしてもエラー表示なので、
どのような設定が必要なんですか?
0561デフォルトの名無しさん
2008/04/10(木) 00:24:06なんのためのメンバ関数なんだか。
0562デフォルトの名無しさん
2008/04/10(木) 00:33:29いや、他人の書いたコードを解読してるんだ。。
0563デフォルトの名無しさん
2008/04/10(木) 00:39:03[ファイル]-[追加]-[新しいプロジェクト]
[Visual C++]-[Win32]-[Win32プロジェクト]-[プロジェクト名]-[OK]
[次へ]-[Windowsアプリケーション]-[■空のプロジェクト]-[完了]
[ソースファイル]-[追加]-[新しい項目]
[Visual C++]-[コード]-[C++ファイル]-[ファイル名]-[追加]
0564デフォルトの名無しさん
2008/04/10(木) 01:46:59ありがとうございます。3行目まではうまく設定できたのですが、
4行目の「ソースファイル」?が何を指しているのかわからず、
そのまま5行目の作成を行いました。
結果はやはりビルドエラーです。
コードは以下です。
LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM);
/* アプリケーションエントリーポイント */
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR CmdLine,
int CmdShow)
{
//処理
return ;
}
/* ウインドウプロシージャ */
LRESULT CALLBACK WindowProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{
//処理
}
return DefWindowProc(hwnd,message,wparam,lparam);
}
0565デフォルトの名無しさん
2008/04/10(木) 01:50:010566デフォルトの名無しさん
2008/04/10(木) 01:54:310567デフォルトの名無しさん
2008/04/10(木) 01:54:451>コンパイルしています...
1>MJ_1.cpp
1>.\MJ_1.cpp(26) : error C2440: '=' : 'const char [6]' から 'LPCWSTR' に変換できません。
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>.\MJ_1.cpp(41) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'const char [6]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>C800.cpp
1>.\C800.cpp(28) : error C2440: '=' : 'const char [6]' から 'LPCWSTR' に変換できません。
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>.\C800.cpp(43) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'const char [6]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>コードを生成中...
1>ビルドログは "file://d:\My Documents\Visual Studio 2008\Projects\C800\C800\Debug\BuildLog.htm" に保存されました。
1>C800 - エラー 4、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
です。
0568デフォルトの名無しさん
2008/04/10(木) 02:02:15なぜコンパイルエラーの部分を省略する。
ググればいろいろ見つかる。
http://www.google.co.jp/hws/search?hl=ja&q=LPCWSTR+char+c2440&client=fenrir&adsafe=off&safe=off&lr=lang_ja
0569デフォルトの名無しさん
2008/04/10(木) 02:21:14ありがとうございます。
文字変換だったのですね。
しかしググっても出てこないので最後に嘆きます。
1>------ ビルド開始: プロジェクト: GAME, 構成: Debug Win32 ------
1>マニフェストを埋め込んでいます...
1>.\Debug\GAME.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. U_U!$kLdK
1>~[
1>ビルドログは "file://d:\My Documents\Visual Studio 2008\Projects\C800\GAME\Debug\BuildLog.htm" に保存されました。
1>GAME - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
なるエラーが出るのですが、まったく意味不明です。
0570569
2008/04/10(木) 18:46:06自己解決しました。
ありがとうございます。
0571デフォルトの名無しさん
2008/04/10(木) 21:45:491000byte程のバイナリデータを保存したいのですが、
long型の配列にデータをmemcpyし、それをrs->Updateしようとすると、
コンパイルで「bool値に変換します」というような警告がでて、データを転送できません。
バイナリデータを転送するにはどのようにすればいいのでしょうか?
(配列には正常にデータがコピーされていることはファイル出力で確認できております)
0572デフォルトの名無しさん
2008/04/11(金) 00:26:01http://support.microsoft.com/kb/258038/ja
0573デフォルトの名無しさん
2008/04/11(金) 06:15:260574デフォルトの名無しさん
2008/04/11(金) 06:18:09virtualなメンバ関数を実行ということなら、可能です。
0575デフォルトの名無しさん
2008/04/11(金) 06:33:22&の付け忘れでした
解決できましたありがとうございます
0577デフォルトの名無しさん
2008/04/11(金) 06:50:200578デフォルトの名無しさん
2008/04/11(金) 07:17:15メモリリークに気をつけような。
boost::ptr_vector の使用も検討してみるといい。
0579デフォルトの名無しさん
2008/04/11(金) 12:34:50int x=10; int y=10;
double a[x][y];
という風に書くのは、xyが小さい間は出来たのですが、newで確保しようとすると
yを変数にできません。vectorを使わずに上記のようなことができるでしょうか?
よろしくお願いします。
0580デフォルトの名無しさん
2008/04/11(金) 12:37:06*a = new double[x]
for( int i = 0; i < x; ++i )
a[x] = new double[y]
こんなん
0581デフォルトの名無しさん
2008/04/11(金) 12:47:330582デフォルトの名無しさん
2008/04/11(金) 12:52:43ありがとうございます。
確保した二次元配列をほかの関数に渡すにはどうすればよいですか?
あと、boost::multi_arrayは速いですか?
今書いているのは、std::vectorもあまり知らない人に見せるためなので、
boostなんてとてもだめです。
0583デフォルトの名無しさん
2008/04/11(金) 12:57:05アセンブリ言語をコンパイルするには、このソースをコンパイルしてから
どうすればいいのでしょうか?
0584デフォルトの名無しさん
2008/04/11(金) 12:58:11これでわたせるんじゃね、多分
0585デフォルトの名無しさん
2008/04/11(金) 13:06:03そういう初心者には、素直に一次元配列を仮想化して使う方がいい。
こんな関数でも用意すればアクセスするのも割と簡単だ。
static unsigned offset(unsigned x, unsigned y, unsigned w)
{
return x + y * w;
}
勿論、メモリ確保はこうなる。
double * a = new double[w * h];
あー、ついでに言えば>580はバグだらけだから要注意で。
つーか、>584もかすだわ。
0586デフォルトの名無しさん
2008/04/11(金) 13:06:38Cソースをコンパイルしてできた実行ファイルを実行してアセンブルすれ
ばいいのでは。
0587デフォルトの名無しさん
2008/04/11(金) 13:19:33有り得ない間違いだな。
0588デフォルトの名無しさん
2008/04/11(金) 13:29:33これは酷い。
0589デフォルトの名無しさん
2008/04/11(金) 13:34:19wcscmp
などの違いがわからない・・・・
あと、lstrcmp とか strcmp みたいなのもあったような気がするけど気のせい?
誰か、これらの関数の違いについて分かり易く教えてください。
0590デフォルトの名無しさん
2008/04/11(金) 13:40:56文字として char で mbcs を使うとき mbscmp
文字として char で sbcs を使うとき strcmp
文字として TCHAR を使うとき lstrcmp
ドキュメント読まずにまず2chで聞くという態度では、わからなくて当たり前。
0591デフォルトの名無しさん
2008/04/11(金) 13:49:11すみません。それがいまいちよくわからないんです。
charを使うときとか、tcharを使うときと言われても抽象的すぎて???
具体的に、どういう処理をするときにmbscmp や strcmp などを使い分けるのでしょうか?
同じ文字列比較でも、mbscmp を使っていたり、 strcmp を使っていたりと、訳が分りません。
0592デフォルトの名無しさん
2008/04/11(金) 13:52:17確かに…ご指摘ありがとうございます
アセンブリ言語を実行するものの意味で使いました
0593デフォルトの名無しさん
2008/04/11(金) 13:52:50それは抽象的だからわからないんじゃなくて、勉強しないからわからないのです。
mbcs と sbcs の違いなんか、Google で 「mbcs と sbcs の違い」を(カッコははずして)
検索すればいくつもそれらしい説明のページが出てくるのです。
もし手抜きじゃなくてホントのホントに何もしないで知識が身に付くと思ってるのなら、
そもそもバカなので勉強しても無駄なので止めるべきです。
0594デフォルトの名無しさん
2008/04/11(金) 14:04:17それは普通、アセンブラと呼ばれる。
いや、厳密に言えば「アセンブリ言語を翻訳するもの」だが。
0595デフォルトの名無しさん
2008/04/11(金) 14:05:02なんか嫌なことでもあったのか?
0596デフォルトの名無しさん
2008/04/11(金) 14:05:03同じ英数字からなる文字列比較でもプログラムによって使っている関数が違うのは
書き手(プログラマー)の意識の違いによる?
さらにワイド文字とマルチバイト文字の違いがよく分らん。。。。
出直してきます。スレ汚してすみません。
0597デフォルトの名無しさん
2008/04/11(金) 14:06:53*a = new double[x]
じゃなくて
a = new double*[x]
だ
0598デフォルトの名無しさん
2008/04/11(金) 14:20:42それだけじゃねーだろ。
0599デフォルトの名無しさん
2008/04/11(金) 15:19:15593じゃないけど、あえて言うなら「投げっぱなしの馬鹿を見てしまったこと」が
「嫌なこと」なんだろう。
0600デフォルトの名無しさん
2008/04/11(金) 20:21:49このコードで落ちます・・・。
int i;
char *lpary[4];
for (i = 0; i < 4; i++){
lpary[i] = new char[256];
}
for (i = 0; i < 4; i++){
delete [] lpary[i];
}
誰か教えてください。
0601デフォルトの名無しさん
2008/04/11(金) 20:23:53多分、他で色々やってる部分でマズいことやってんじゃないかと。
0602デフォルトの名無しさん
2008/04/11(金) 20:24:46for (i = 0; i < 4; i++){
delete lpary[i]
}
delete[] lpary;
0603デフォルトの名無しさん
2008/04/11(金) 20:25:53おいおい^^;
0604デフォルトの名無しさん
2008/04/11(金) 20:26:53すまん忘れてくれ
0605600
2008/04/11(金) 20:29:44newとdeleteの間でやってる処理で確保したポインタに別のポインタ
渡してしまってた・・・。
まじごめん;;
0606デフォルトの名無しさん
2008/04/11(金) 20:30:250607デフォルトの名無しさん
2008/04/11(金) 23:28:52>さらにワイド文字とマルチバイト文字の違いがよく分らん
それを調べるのが先だということに気づかないの?
0608デフォルトの名無しさん
2008/04/11(金) 23:30:060609デフォルトの名無しさん
2008/04/12(土) 00:33:200610デフォルトの名無しさん
2008/04/12(土) 00:34:100611デフォルトの名無しさん
2008/04/12(土) 00:56:30この場合exit(0)が実行された時に正しく破棄が行われますでしょうか?
0612デフォルトの名無しさん
2008/04/12(土) 00:59:02だいたいOSがうまく解放してくれる・・・かもね。
そんな保障はどこにもない。ちゃんと解放するかJava等に移行しましょう。
0613デフォルトの名無しさん
2008/04/12(土) 01:14:070614デフォルトの名無しさん
2008/04/12(土) 01:15:38ライブラリの仕様によるけど、
・静的なオブジェクトのデストラクタ⇒呼ばれる
・main()から辿ってその時点までのスタック上にあるオブジェクトのデストラクタ⇒呼ばれない
つまりスタックの巻き戻しは行われないが通常のクリーンアップルーチンは呼ばれる、
が一般的なのでは。何か重要な後処理が必要なら atexit でも書いとくべきだな。
0615デフォルトの名無しさん
2008/04/12(土) 01:34:05ありがとうございます
0616デフォルトの名無しさん
2008/04/12(土) 02:10:32const std::deque<Log>& pastLog = pData->LogData
を上のように作ってそのiteratorを使用したいのですが
const std::deque<M3Log>::iterator itr = pastLog.begin();
とすると
左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。
と怒られます
何処をどうしていいのかわかりません、アドバイスをいただけないでしょうか
0617616
2008/04/12(土) 02:12:31const std::deque<M3Log>::iterator itr = pastLog.begin();
↓
const std::deque<Log>::iterator itr = pastLog.begin();
0618デフォルトの名無しさん
2008/04/12(土) 02:12:40std::deque<Log>::const_iterator itr = pastLog.begin();
じゃないの?
0619デフォルトの名無しさん
2008/04/12(土) 02:19:58ありがとうございます
無事コードがコンパイルを通るようになりました
const_iteratorなんてあったのか・・・
0620デフォルトの名無しさん
2008/04/12(土) 03:41:33>const_iteratorなんてあったのか・・・
超ワロタじゃないかよ
0621デフォルトの名無しさん
2008/04/12(土) 04:19:520622デフォルトの名無しさん
2008/04/12(土) 09:55:510623デフォルトの名無しさん
2008/04/12(土) 11:01:310624デフォルトの名無しさん
2008/04/12(土) 12:57:400625デフォルトの名無しさん
2008/04/12(土) 14:40:300626デフォルトの名無しさん
2008/04/12(土) 14:49:060627デフォルトの名無しさん
2008/04/12(土) 14:50:30std::set::const_iterator it = hoge.find(....);
if (it != hoge.end()) {
// ここで it を使う
}
のようなことをするときにifのブロック内にitのスコープを限定して
if ((std::set::const_iterator it = hoge.find(...)) != hoge.end()) {
のようなことをしたいんですけど無理ですか?
0628デフォルトの名無しさん
2008/04/12(土) 15:23:430629デフォルトの名無しさん
2008/04/12(土) 15:39:39break;
}
おすすめはしない
0630デフォルトの名無しさん
2008/04/12(土) 15:40:030631デフォルトの名無しさん
2008/04/12(土) 15:40:50{
std...it = ...:
if(){
}
}
0632デフォルトの名無しさん
2008/04/12(土) 15:54:26template<typename T, template<class> class Comp> class eval_lapper
{
public:
eval_lapper( std::pair<T, T> rhs ) : obj_(rhs.first), target_(rhs.second) {}
operator bool() const { return Comp<T>()(obj_, target_); }
T& obj() { return obj_; }
const T& obj() const { return obj_; }
private:
T obj_;
T target_;
};
int main()
{
std::set<int> s;
//s.insert(123);
if( eval_lapper<std::set<int>::const_iterator, std::not_equal_to > it = std::make_pair( s.find(123), s.end() ) )
std::cout << *(it.obj()) << std::endl;
return 0;
}
0633デフォルトの名無しさん
2008/04/12(土) 15:57:330634デフォルトの名無しさん
2008/04/12(土) 15:58:440635デフォルトの名無しさん
2008/04/12(土) 16:00:12普通には使われないようなポインタへのキャスト演算子を
オーバーロードするのが一般的。
メンバポインタとか。
0636デフォルトの名無しさん
2008/04/12(土) 16:41:51面白いなやり方だな
でも、lapper => wrapper じゃね
0637デフォルトの名無しさん
2008/04/12(土) 16:53:02struct test{
int a;
test(int a_) : a(a_){}
};
//instance.cpp
#include "test.h"
test obj(1024);
//program.cpp
#include <iostream>
#include "test.h"
extern test obj;
int main(){
std::cout << obj.a << std::endl;
return 0;
}
別々の翻訳単位に型testが定義されてるけど、同一の型として認識されるの?
VC8ではコンパイル通った。
0638デフォルトの名無しさん
2008/04/12(土) 17:01:05同じヘッダインクルードしてるんだし
0639デフォルトの名無しさん
2008/04/12(土) 17:01:59場合によっては非常に愉快な話になるけどね
0640デフォルトの名無しさん
2008/04/12(土) 17:09:350641デフォルトの名無しさん
2008/04/12(土) 22:59:36鼻から悪魔が出たらもっと愉快だな
0642デフォルトの名無しさん
2008/04/13(日) 22:40:49と
String^ name;
の違いはなんですか?ハンドルの意味がわかりません
0643デフォルトの名無しさん
2008/04/13(日) 22:48:53C++/CLI はスレ違いなのです。
C++/CLI part3
http://pc11.2ch.net/test/read.cgi/tech/1206447234/
0644デフォルトの名無しさん
2008/04/13(日) 22:50:41とりあえず「C++/CLI ハンドル 自動変数」でググったら説明が見つかると思う。
それで分からなかったら、もう一度おいで。
# CLIってちょい過疎気味の本スレしか無いのな
0645デフォルトの名無しさん
2008/04/14(月) 01:32:44template <bool M> struct P {
int* _p;
P(int* v=NULL) : _p(v) {}
P(P& v) : _p(v.release()) {} // (1)
~P() { if(M && _p) delete _p; }
void reset(int* v=NULL)
{ if(M && _p && _p != v) delete _p; _p = v; }
int* release()
{ int* temp = _p; _p = NULL; return temp; }
};
P<true> pf(int n) { return P<true>(new int(n)); }
int main() { P<true> a = pf(3); }
上記だと
error: no matching function for call to ‘P<true>::P(P<true>)’
とコンパイルエラーがでます。 しかし (1) を
template <bool _M> P(P<_M>& v) : _p(v.release()) {}
にするとエラーにならずにコンパイルできるようになります。なぜコンパイルエラーがでなくなるのでしょうか? コンパイラは gcc version 4.0.1 (Apple Inc. build 5465) です。
0646デフォルトの名無しさん
2008/04/14(月) 01:43:50コピーコンストラクタをテンプレート関数にして異なるテンプレート引数の型でも受け取れられるれりれるようにしたから。
0647デフォルトの名無しさん
2008/04/14(月) 01:46:07よく分からんけど、VC8だとどちらもコンパイル通ったぞ
0648デフォルトの名無しさん
2008/04/14(月) 01:49:12エスパーすると645は(1)をP(P& v) : _p(v.release()) {}とした上でソースコードのどこかで
P<false> oldObj;
P<true> newObj(oldObj);
とでもしているんだろう。
0649645
2008/04/14(月) 01:52:20テンプレート引数の型は書き変える前も後も true しか扱わないのに異なる型を受け取れるようにしないと
いけない理由が分かりません。
途中で P<false> に変換されているのも確認できませんでした。
>>647
gcc だけで起きる問題なんでしょうか…
>>647
いやしてないのです。上記のソースのみです。
0650デフォルトの名無しさん
2008/04/14(月) 02:17:53if(num[i] == num[j])以降のdowhileで必ずループに入ってしまうのですが
原因を教えていただけませんか?
void random::gt(){
srand((unsigned) time(NULL));
num[0] = rand() % 10;
if(num[0] <= 0){
do{
num[0] = rand() % 10;
}while(num[0] <= 1);
}
//その他乱数取得
for(i=0;i<4;i++){
if(i <= 4){
for(j=1;j<4;j++){
num[j] = rand() % 10;
if(num[i] == num[j]){
do{
num[j] = rand() % 10;
system("PAUSE");
}while(num[i] != num[j]);
}
};
}
};
}
0651デフォルトの名無しさん
2008/04/14(月) 02:47:43Pは接頭語みたいなもので一部の例外を除いて単独では使えない
この場合だとP<true>とP<false>が型
たとえばP<true>を定義したとき、もしP(P&)の記述が許されると
コピーコンストラクタP(P<true>)か
引数付きのコピーじゃないコンストラクタP(P<false>)か曖昧になる
0652>650
2008/04/14(月) 03:22:48dowhileは必ず1回はループ内の処理を実行するが?
あと、その貼ったソースはそのままか?変更して貼ってない?
0653645
2008/04/14(月) 03:33:40あーなるほど。コピーコンストラクタかコンストラクタが曖昧になるんですね。
P<true> -> P<false> の変換がされると嫌で書き方に困っていたのですが
P<true> -> P<true> OK
P<true> -> P<false> OK
P<false> -> P<false> OK
P<false> -> P<true> NG
の時に
template <bool M>
struct P {
template <bool _M> P(P<_M>& v);
...
};
template <> template <> P<true>::P(P<true>& v) : _p(v.release()) {}
//template <> template <> P<true>::P(P<false>& v); // NG
template <> template <> P<false>::P(P<false>& v) : _p(v._p) {}
template <> template <> P<false>::P(P<true>& v) : _p(v._p) {}
みたいにもできるってことですね!ありがとうございました。
0654デフォルトの名無しさん
2008/04/14(月) 03:33:47if(num[i] == num[j]){のところで
変数num[i]とnum[j]が違っていても処理をしてしまう原因
を知りたかったのです
ソースは特に変えてないと思うのですが
どこかおかしいでしょうか
0655645
2008/04/14(月) 03:36:180657デフォルトの名無しさん
2008/04/14(月) 09:29:44i が 0 から 3 をとりながら動き、
そのループのなかで j が 0 から 3 をとりながら動くんですよね。
すると, i = j ならば, num[i] == num[j] となって、system("pause") がかならず
実行されることになります。
なさりたいことは、こんなのでしょうか?
(確認環境 WindowsXP, 処理系 cygwin(gcc 3.4.4)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6239.txt
0659657
2008/04/14(月) 11:24:42バグってました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6240.txt
0660デフォルトの名無しさん
2008/04/14(月) 14:51:59remove_ifなんかのアルゴリズムでスマートに書けますか?
0661デフォルトの名無しさん
2008/04/14(月) 15:06:050662デフォルトの名無しさん
2008/04/14(月) 16:59:15#include <iostream>
#include <algorithm>
#include <set>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
int main() {
namespace bll=boost::lambda;
std::set<int> a,b;
a.insert(1);
a.insert(2);
a.insert(3);
b.insert(2);
b.insert(3);
std::remove_copy_if(a.begin(), a.end(),
std::ostream_iterator<int>(std::cout),
bll::bind(std::find<std::set<int>::iterator, int>,
b.begin(),
b.end(),
bll::_1 ) == b.end());
return EXIT_SUCCESS;
}
uu-n...
0663デフォルトの名無しさん
2008/04/14(月) 17:49:02#include <iostream>
#include <algorithm>
#include <set>
#include <boost/lambda/lambda.hpp>
#include <boost/egg/lazy.hpp>
#include <boost/lambda/bind.hpp>
#include <boost/assign/std/set.hpp>
struct base {
template< class Myself, class Arg0, class Arg1, class Arg2 >
struct apply {
typedef Arg0 type; };
template< class Result, class Arg0, class Arg1, class Arg2 >
Result call(Arg0 begin, Arg1 end, Arg2 value) const {
return std::find(begin, end, value);
} };
typedef boost::egg::function<base> op;
boost::egg::result_of_lazy<op>::type
const find_lazy = BOOST_EGG_LAZY({});
int main() {
namespace bll=boost::lambda;
using boost::assign::operator+=;
std::set<int> a,b;
a+=1,2,3; b+=2,3;
std::remove_copy_if(a.begin(), a.end(),
std::ostream_iterator<int>(std::cout),
find_lazy(b.begin(), b.end(), bll::_1) == b.end());
}
uuu-nnn...
0664デフォルトの名無しさん
2008/04/14(月) 17:52:020665デフォルトの名無しさん
2008/04/14(月) 18:01:20a = bはだめなの?
だめだから聞いているんだろうけど。
0666デフォルトの名無しさん
2008/04/14(月) 18:06:40横からだけど
a : 10,20,30,40
b : 20,50
この場合多分望む結果は
a : 20
だろうけど、>>665だと間違った結果を返す。
0667デフォルトの名無しさん
2008/04/14(月) 18:37:09vector<int>の要素が
1 2 (空白) 3 4 (空白)
の様に途中に空白をいれることはできるのでしょうか?
0668デフォルトの名無しさん
2008/04/14(月) 18:46:45プロジェクト作成は(Win32とか)どれを選ぶのが
適当でしょうか?
0669デフォルトの名無しさん
2008/04/14(月) 19:40:07Linux+GCCがお勧め
0670デフォルトの名無しさん
2008/04/14(月) 19:42:550671デフォルトの名無しさん
2008/04/14(月) 20:02:18.hファイルに関数の本体を書き出すと正常にコンパイルが通るのに
.cppファイルに書き出すと
C2039 'foo' : 'hoge' のメンバではありません。
となってしまいます
これはどういう事でしょうか・・・
0672デフォルトの名無しさん
2008/04/14(月) 20:05:040673デフォルトの名無しさん
2008/04/14(月) 20:10:42l / / // ,.ィ´ !', ト、 ヽ. ヽ
. レ′, / //_,..イ// ,| l |lλぃ い. ',
} / { ‐7Ζ_∠!イ 〃 /リ,}/┤!」l 小 !
ノ i| 八//'゛ -`l 〃 /ノ'´ j ! |l/| iイ/
ヽ|l//イ ャ''Tェ歹''`y゙/ 'ヾ歹¨リ`イ!ノ// まさか、ロリコンじゃないわね・・・
) 〃A ``''''"´ '^ r; `'''"´/クK/
Y/ !トヘ. //// //// /.ィi| ;|
|i( l|`Ti\,___ '⌒) ,∠lj_|iリ
{い ヾLr┤:.:.:.:.`:、__,,..イ;:.::.:./勹_」!
``ァ;=<´ ̄``ヽ:ヽ;‐-/;/``Tr-.、
0674デフォルトの名無しさん
2008/04/14(月) 20:13:11>.cppファイルに
しか書いてなかったとかいうオチだったら、君が泣くまで殴るのをやめない。
0675デフォルトの名無しさん
2008/04/14(月) 20:14:56仕事でのデータが含まれてるのでちょっとソースは公開できないですorz
>>674
インテリセンスで関数宣言を確認してから中身を書いてるのでそれはないと思います
0676デフォルトの名無しさん
2008/04/14(月) 20:25:230677デフォルトの名無しさん
2008/04/14(月) 20:27:540678デフォルトの名無しさん
2008/04/14(月) 20:39:030679デフォルトの名無しさん
2008/04/14(月) 20:58:05これはどういう事??
0680デフォルトの名無しさん
2008/04/14(月) 21:22:350681デフォルトの名無しさん
2008/04/14(月) 21:53:280682デフォルトの名無しさん
2008/04/14(月) 21:58:230683デフォルトの名無しさん
2008/04/14(月) 21:58:43vector<int>に整数以外のものは入れられません。
仮に、負値を例外として扱ってよいなら空白の代わりに-1を入れておくと言う手もなくはありませんが、
boost::optionalを使ってみてはどうでしょう。
0684デフォルトの名無しさん
2008/04/14(月) 22:18:55それとも型サイズ分だけ強引にアドレスが+1されるんですか?
0685デフォルトの名無しさん
2008/04/14(月) 22:21:43どういう状況を言ってるんだ?
0686デフォルトの名無しさん
2008/04/14(月) 22:22:450687デフォルトの名無しさん
2008/04/14(月) 22:25:230688デフォルトの名無しさん
2008/04/14(月) 22:26:511つのデータがメモリに書き込まれる時は必ず連番のアドレスに配置されるんですか?
0689デフォルトの名無しさん
2008/04/14(月) 22:27:37少なくとも仮想アドレスは連番だが。
物理アドレスは知らんがな。
0690デフォルトの名無しさん
2008/04/14(月) 22:28:51RECTとかSIZEを包んだクラスはありますか?
0691デフォルトの名無しさん
2008/04/14(月) 22:31:410692デフォルトの名無しさん
2008/04/14(月) 22:31:510693デフォルトの名無しさん
2008/04/14(月) 22:32:58つまり&で表示されるアドレスは仮想でWindowsが物理メモリの番地とリンクを取って隙間に埋め込んでるから考えなくていいってことですね
ありがとうございました。
0694デフォルトの名無しさん
2008/04/14(月) 22:38:39それでいいのか?
本当にそれでいいのか?w
0695デフォルトの名無しさん
2008/04/14(月) 22:43:16getとsetはつけたほうがいいの?それともOR?
0696デフォルトの名無しさん
2008/04/14(月) 23:04:140697デフォルトの名無しさん
2008/04/14(月) 23:06:530698デフォルトの名無しさん
2008/04/14(月) 23:15:52int Hoge;
0699デフォルトの名無しさん
2008/04/14(月) 23:43:26winsock2.hはインクルードしてるんですが、ほかになにかインクルードしなければいけないんでしょうか?
0700デフォルトの名無しさん
2008/04/14(月) 23:55:470701デフォルトの名無しさん
2008/04/15(火) 00:24:06std::list<int>& refList = iList;
で良いのでしょうか?
0702デフォルトの名無しさん
2008/04/15(火) 00:31:230703デフォルトの名無しさん
2008/04/15(火) 00:39:51簡単に試してみたけど
大丈夫そうな気がしました
0704デフォルトの名無しさん
2008/04/15(火) 00:54:33typedef struct Foo_tag{
int a;
int b;
int c;
} Foo;
というような構造体があったときに、
Foo foo = {0};
という初期化を行っているコードをたまに見かけますが、これは何を行っているのでしょうか?
一応MinGW環境で同様のコードを書いてテストしてみましたが、{0} で初期化した構造体はゼロクリアされており、
初期化しなかった構造体にはゴミが入っていました。
ということは、上記のコードは構造体をゼロクリアするという認識でいいのでしょうか?
それと、標準Cの規格でこういう初期化は許されていますか?
構造体のゼロクリア処理は memset() などを利用して行っているコードが多いことを考えると、標準規格ではなさそうな
気がするんですが…。
0705デフォルトの名無しさん
2008/04/15(火) 01:00:36残りは0で初期化されるってヤツだったと思う。
標準Cでどうなのかは知らん。
0706デフォルトの名無しさん
2008/04/15(火) 01:04:310707デフォルトの名無しさん
2008/04/15(火) 01:12:58ありがとうございます。途中まで初期化ということができるんですね。
それなら構造体をゼロクリアするときはこれを使うと楽かもしれないですね。
(先頭にネストした構造体があったりするとどうなるのかよくわからないので、汎用ではないのかもしれないですが)
0708デフォルトの名無しさん
2008/04/15(火) 01:13:32初期化時のみOK
0709デフォルトの名無しさん
2008/04/15(火) 01:18:46普通の使い方で初期化する必要があるのかどうかは知らないが
0710デフォルトの名無しさん
2008/04/15(火) 01:36:11ものすごく行儀の悪いコーディングだけど構造体同士を memcmp で比較できる
0711デフォルトの名無しさん
2008/04/15(火) 01:58:11あくまで「普通の使い方」の話な
キャストしたりすればいろいろ問題も出てくるだろうよ
0712デフォルトの名無しさん
2008/04/15(火) 01:59:59標準規格です。
0713デフォルトの名無しさん
2008/04/15(火) 02:01:05昔のコンパイラだと 0 で初期化されません
0714デフォルトの名無しさん
2008/04/15(火) 03:28:46template<typename Class>
void assign_intersection(std::set<Class>& a, std::set<Class> const& b)
{
std::set<Class> result;
std::set_intersection(a.begin(), a.end(), b.begin(), b.end()
, std::inserter(result, result.end()));
a.swap(result);
}
0715デフォルトの名無しさん
2008/04/15(火) 08:00:05**
***
****
...
みたいな感じの出力を得たいのですが、***を出力する部分は、なにか特別な書き方とかないですか?
関数を作るしかないですか?
0716デフォルトの名無しさん
2008/04/15(火) 08:06:55MFCならスタティックテキストの表示を*に変えるという機能(設定)があったり。
自前でもキー入力(KeyDownとか)→別の変数に格納→その文字数だけ*を表示で簡単に出来る。
0717デフォルトの名無しさん
2008/04/15(火) 10:30:07void f(int n){
for(int i = 0; i < n; i++) std::cout << '*';
std::cout << std::endl;
}
void g(int n){
for(int i = 0; i < n; i++) f(i);
}
0718デフォルトの名無しさん
2008/04/15(火) 14:19:49std::cout << s << '\n';
0719デフォルトの名無しさん
2008/04/15(火) 20:41:31#include <iomanip>
int main()
{
for (int i = 0; i < 10; ++i)
std::cout << std::setw(i) << std::setfill('*') << "" << std::endl;
}
ところでC++でいいんだよね?
0720デフォルトの名無しさん
2008/04/15(火) 22:13:39void f1()
{
int n, i;
for(n = 1; n <= 10; n ++) {
for(i = 0; i < n; i ++) putchar('*');
putchar('\n');
}
}
void f2()
{
int n;
for(n = 1; n <= 10; n ++)
puts("**********" + 10 - n);
}
void f3()
{
int n;
for(n = 1; n <= 10; n ++)
printf("%.*s\n", n, "**********");
}
0721デフォルトの名無しさん
2008/04/16(水) 00:27:56イメージ>>720のf3()が近いんだけど・・・使う機会が少ないとすぐにわすれちゃうな・・・
0722デフォルトの名無しさん
2008/04/16(水) 00:38:10このやり方はじめて見た。目から鱗やわ
0723デフォルトの名無しさん
2008/04/16(水) 00:42:59その鱗はつけておいた方がいいw
0724デフォルトの名無しさん
2008/04/16(水) 02:36:32その中でstr >> coutはクラス内でoperator>>を用意することで
動くようになったのですが、cout << strは「二項演算子<<はクラス
strをサポートしていません」と言われてしまいます。
これはどのようにしたらcout << strが出来るようになるのでしょうか?
またお恥ずかしながら、str = "aaa"は作れたのですが、str ="aaa"+"bbb"は
作ることが出来ませんでした。これはどの様に作ったらいいのでしょうか?
どうかよろしくお願いします。
0725デフォルトの名無しさん
2008/04/16(水) 02:46:22C言語で、unsigned char から signed char に代入、もしくはその逆を行った場合、ビットバターンは常に保存されますか?
0726デフォルトの名無しさん
2008/04/16(水) 02:55:53いいえ。
0727デフォルトの名無しさん
2008/04/16(水) 03:01:40上:strをサポートする二項演算子を書く。
basic_ostream<foobar> & operator <<(basic_ostream<foobar> & os, str & st);
下:無理。
0728デフォルトの名無しさん
2008/04/16(水) 03:02:50ありがとうございます。そうなると char* を適宜 unsigned char* にキャストしたりしないとダメですね。
一部バイナリが混ざってるファイルを読む必要があったので助かりました。
0729デフォルトの名無しさん
2008/04/16(水) 03:58:13K&R2 A6.1 (promotion) を参照してください。
char/unsigned char は先に int に変換される点、特に要注意です。
0730デフォルトの名無しさん
2008/04/16(水) 04:09:290731729
2008/04/16(水) 04:57:02char c = 0x81;
if (c == 0x81)
printf("=\n");
else
printf("!=\n");
の結果って、あれ〜?!ってなりませんか?
0732デフォルトの名無しさん
2008/04/16(水) 11:52:33char が符号付きで最大値が 127 の場合の話なら、
char c = 0x81 の時点で未定義動作。
問題は promotion じゃなくてオーバーフロー。
0733デフォルトの名無しさん
2008/04/16(水) 12:09:540734732
2008/04/16(水) 12:20:21ごめん。間違い。オーバーフローが問題なのは違いないけど、型変換での
オーバーフローは未定義動作じゃなくて、値が処理系定義のものになるか、
処理系定義のシグナルが発生する、らしい。
0735729
2008/04/16(水) 20:42:23了解いたしました。
char buffer[N];
...
while (fgets(buffer, N, fp) != NULL) {
if (buffer[i] == ...)
...
}
などと安易に考えると、(たとえば漢字コードの判別など)わからなくなってしまった経験がありました。
unsigned char buffer[N];
とすれば、問題ないのではありますが。
ご指摘ありがとうございました。 またひとつ賢くなりました。
0736デフォルトの名無しさん
2008/04/16(水) 20:49:18漢字コードをいろいろ扱うなら >>735 だと unicode の時に困るんじゃなかろうか?
(文字列に \0 が含まれる可能性が高いから)
0737デフォルトの名無しさん
2008/04/16(水) 21:04:51signed char と unsigned char は同表現と書いている
読み間違い?
A char, a signed char, and an unsigned char occupy the same amount of storage and have the same alignment
requirements (3.9); that is, they have the same object representation. For character types, all bits of
the object representation participate in the value representation. For unsigned character types, all possible
bit patterns of the value representation represent numbers.
0738デフォルトの名無しさん
2008/04/17(木) 01:47:49読みには自信ないのですが、
単に、
1) char/unsigned char/signed char のいずれも同じ量のメモリを占有する。
2) char/unsigned char/signed char のアラインメント(配置位置、偶数バイトを先頭にする、アドレスが4 の倍数のバイトを先頭にする、など)が同一である。
という意味でのみ same としているだけではないでしょうか。
char / unsigned char / signed char の表現がまったく同一であるというのは不可能と思われますのですが。
後続の文では、
char のすべてのビットが数をあらわしているわけではない(単に関係するといっているだけ、符号の場合もありますよ、ということでしょうか。)
unsigned char はすべてのビットが数を構成する要素となる。
と読めます。
0739デフォルトの名無しさん
2008/04/17(木) 07:16:24template <typename T>
この2つはちがいがありますか?
0740デフォルトの名無しさん
2008/04/17(木) 07:21:280741デフォルトの名無しさん
2008/04/17(木) 08:20:340742デフォルトの名無しさん
2008/04/17(木) 08:26:55別にこだわるわけじゃないから、もし仮にclassと書いてくれと職場で言われたら
二つ返事でclassにするけど。
0743デフォルトの名無しさん
2008/04/17(木) 08:30:00その後しっかり中でstatic_assertするけどね。
0744デフォルトの名無しさん
2008/04/17(木) 10:03:280745デフォルトの名無しさん
2008/04/17(木) 10:06:120746デフォルトの名無しさん
2008/04/17(木) 11:04:06char src[ ] = "seikima"
char dest[4] = "tsu"
という文字列を結合し、表示させることが出来ますか?
0747デフォルトの名無しさん
2008/04/17(木) 11:10:49char result[11];
sprintf(result, "%s%s", src, dest);
printf("%s\n", result);
0748746
2008/04/17(木) 11:14:54sprintfも使わずにforを使って何とか表示させたいのですが
いかがでしょうか?
0749デフォルトの名無しさん
2008/04/17(木) 11:25:24char ret[11];
for(int i =0 ; i < strlen(src) ; i++)
{
ret[i]= src[i];
}
for(int i=0 ; i <strlen(dest) ; i++)
{
ret[i+strlen(src)}=dest[i];
}
printf("%s\n",ret);
0751デフォルトの名無しさん
2008/04/17(木) 11:34:17strlen()をsizeof()-1に変えれば同じ動作だ
0752デフォルトの名無しさん
2008/04/17(木) 11:37:17条件後だししすぎ
char result[20], *p, *q;
for(p=result,q=src;*p++=*q++;);
for(p--,q=dest;*p++=*q++;);
0753746
2008/04/17(木) 11:46:22ポインタも使ってはいけないようです。
0754デフォルトの名無しさん
2008/04/17(木) 11:50:240755デフォルトの名無しさん
2008/04/17(木) 11:51:000756デフォルトの名無しさん
2008/04/17(木) 11:55:25テキストでも目を通した方が早いんじゃないの?
何の項目についての課題か分からないんじゃ答えようがないわ
0757デフォルトの名無しさん
2008/04/17(木) 11:57:30次は「 [] 演算子も使えません 」とか?
0758746
2008/04/17(木) 11:59:26課題:配列について
内容:char src[ ] = "seikima";
char dest[4] = "tsu";
と配列を用意し、destの中身をsrcに結合させる。
ただし、for文を使うこと・ポインタ、string.hは使ってはならない。
0759デフォルトの名無しさん
2008/04/17(木) 12:03:12宿題は宿題スレへ。
C/C++の宿題を片付けます 105代目
http://pc11.2ch.net/test/read.cgi/tech/1208268461/
0760746
2008/04/17(木) 12:03:56誘導ありがとうございます。ご迷惑をおかけしました。
0761デフォルトの名無しさん
2008/04/17(木) 12:06:07dest を書き換えずに src に書き込むのか、とか、
宿題にしてもクソすぎるだろ。学校名晒してくんない?
0762デフォルトの名無しさん
2008/04/17(木) 12:12:220763デフォルトの名無しさん
2008/04/17(木) 12:21:40中でどう読めば良いのでしょか。
0764デフォルトの名無しさん
2008/04/17(木) 12:25:31近くなると思うけど、ポインタも駄目てのは解らん。
0765デフォルトの名無しさん
2008/04/17(木) 12:30:14関数のオーバーロードとかでできんじゃね
0766デフォルトの名無しさん
2008/04/17(木) 12:30:410767デフォルトの名無しさん
2008/04/17(木) 12:30:53ttp://wisdom.sakura.ne.jp/programming/c/c62.html
0768デフォルトの名無しさん
2008/04/17(木) 12:31:06可変長引数とかva_argsなんかでググるといいと思うよ。
0769デフォルトの名無しさん
2008/04/17(木) 12:31:25可変引数または可変個引数でぐぐる
0770デフォルトの名無しさん
2008/04/17(木) 12:34:090771763
2008/04/17(木) 12:37:07stdarg.hなんてヘッダ、目にした事すらありませんでした。
0772デフォルトの名無しさん
2008/04/17(木) 12:40:07個人的には設計に失敗してやむなく・・・ってイメージがあるのだが
0773デフォルトの名無しさん
2008/04/17(木) 12:45:050774763
2008/04/17(木) 12:46:42**でも事足りるんですが、その場でわざわざポインタの配列を用意しないと
いけない場合が出てくるだろうし、その場で列挙出来たら楽かなぁとか。
0775デフォルトの名無しさん
2008/04/17(木) 12:50:54型安全性に問題があるから、特に C++ ではやむなくって意識でいいと思う。
C++ 的には iostream や boost::format みたいに演算子で繋ぐのが正解かな。
0776デフォルトの名無しさん
2008/04/17(木) 22:15:48組み込みの本って探してもどこにも無いし、ネットで買おうにも中身がどんな感じかも分からないんでどれを買えばいいのか分からないです
あとできれば必要で組み込み初めてに適した機材とかも教えて欲しいです
0777デフォルトの名無しさん
2008/04/17(木) 23:24:030778デフォルトの名無しさん
2008/04/18(金) 00:41:53fwrite(buf, 1, 1024, fp);
fwrite(buf, 1024, 1, fp);
0779デフォルトの名無しさん
2008/04/18(金) 00:45:24どこか配列とかに格納しないとだめでしょうか?
0780デフォルトの名無しさん
2008/04/18(金) 01:00:21分散=(X^2 の平均) - (Xの平均)^2
を使用すれば、1pass で計算できますよ。
0781デフォルトの名無しさん
2008/04/18(金) 01:04:090782デフォルトの名無しさん
2008/04/18(金) 01:07:17最後にまとめりゃOK
0783デフォルトの名無しさん
2008/04/18(金) 01:23:46もしかしたら処理速度が変わるかも・・・ね?
0784デフォルトの名無しさん
2008/04/18(金) 02:02:27class stat
{
public:
stat() : sum(0), sum_square(0), num(0) {}
void push(double a) {
sum += a;
sum_square += a*a;
++num;
}
double mean() {
return sum / num;
}
double variance() {
return sum_square/num - (sum/num)*(sum/num);
}
private:
double sum;
double sum_square;
int num;
};
0785デフォルトの名無しさん
2008/04/18(金) 07:50:12「GCCではgetche」の行のprintf()をコメントアウトするとちゃんと取れるのですが
#include <stdio.h>
int main(void)
{
int for1inc = 0;
char userinput = 0;
for(for1inc=0; for1inc < 10; for1inc++)
{
printf("文字を入力 : \n (GCCではgetche()が使えず改行コードと共に入力されるので5回までしか入力不可) \n\n");
userinput = getchar();
printf("Your input is %c. ""%c"" ASCII code is %d. \n", userinput, userinput, userinput);
for( ; userinput; userinput--)
{
printf("%c", '.');
}
printf("\n");
}
return 0;
}
0786デフォルトの名無しさん
2008/04/18(金) 09:32:34>783の戯言はさておき、途中でエラーが発生したときの扱いが違う。
前者は書き込みに成功したバイト数が得られるが、
後者は1024バイト全てが書き込めたかどうかしか判らない。
0787デフォルトの名無しさん
2008/04/18(金) 10:10:310788141
2008/04/18(金) 10:29:25読み込んで画面に表示してくれますが、VC++では表示してくれ
ません。プログラムで何か処理が抜けているんでしょうか?
#include "stdafx.h" // VC++の場合
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int i;
double x,y;
ifstream fin;
fin.open("aaa.dat");
while(fin >> i>> x >> y) cout << i << ' ' << x <<' ' << y << endl;
fin.close();
// cin>>i; // VC++の場合
return 0;
}
aaa.datの中身(テキスト)
1 10.0 12.3
2 20.0 20.5
3 30.0 30.8
4 40.0 50.6
0789デフォルトの名無しさん
2008/04/18(金) 10:39:040790デフォルトの名無しさん
2008/04/18(金) 11:04:560791デフォルトの名無しさん
2008/04/18(金) 11:14:42ユーザ関数では仮引数をchar **a[]にしているのですが、実引数は何にすればいいのか分からないので教えて下さい
0792デフォルトの名無しさん
2008/04/18(金) 11:15:46argv そのまま渡せるように引数も同じ型にしとけよ。
0793デフォルトの名無しさん
2008/04/18(金) 11:27:51argvをそのまま渡すようにするには、ユーザ関数の仮引数と呼び出す際の実引数は何にすればいいのでしょう?
0794デフォルトの名無しさん
2008/04/18(金) 11:30:160795デフォルトの名無しさん
2008/04/18(金) 11:48:44分かりました、ありがとうございました。
0796デフォルトの名無しさん
2008/04/18(金) 13:36:50エラーとかじゃなくて単に何も表示されない?
0797デフォルトの名無しさん
2008/04/18(金) 13:39:110798788
2008/04/18(金) 15:50:11データファイルaaa.datをdebugフォルダに入れて実行ファイル
を実行すると正常に実行されます。ですが、統合環境では何も
表示されないです。
Projects\test\test (testは私がつけたプロジェクト
名のフォルダ) というフォルダにデータファイルを置
くと統合環境ではうまくいくようです。しかし、こん
なこと最初はわかんないよ。
0799デフォルトの名無しさん
2008/04/18(金) 15:55:53フルパスでファイルを扱うのでなければ、カレント
ディレクトリをちゃんと意識するようにしないと。
0800デフォルトの名無しさん
2008/04/18(金) 16:00:300801デフォルトの名無しさん
2008/04/18(金) 16:29:49std::ifstream fin("...");
てやったほうがいいよ
close後何も処理しないのならcloseも不要だよ
0802デフォルトの名無しさん
2008/04/18(金) 18:12:43Cとjavaは一応できます
0803デフォルトの名無しさん
2008/04/18(金) 18:15:060804デフォルトの名無しさん
2008/04/18(金) 19:10:220805デフォルトの名無しさん
2008/04/18(金) 19:17:44NUMAとかそーいうキーワードで調べてみるといいと思う。
0806デフォルトの名無しさん
2008/04/18(金) 19:38:09ありがとう。評価ボード調べてみたらくそ高けぇw
ごめんなさい勉強用程度なら1万程度もあれば揃うだろうとなめてました
0807デフォルトの名無しさん
2008/04/18(金) 19:42:52こんなのから始めた方がいいよ。
ttp://hijiri3.s65.xrea.com/sorekore/develop/pic/00_start.htm
0808デフォルトの名無しさん
2008/04/18(金) 19:51:44�d これは面白そう
もうちょっとググって組み込みのこと勉強してきます
0809デフォルトの名無しさん
2008/04/18(金) 20:07:210810デフォルトの名無しさん
2008/04/18(金) 20:32:22提示されたコードをコンパイルしましたが、特に異状はないと思います。
環境とコンパイルオプションを教えてください。
当方が確認した環境は WindowsXP, コンパイラはgcc3.4.4(cygwin)です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6272.txt
0811デフォルトの名無しさん
2008/04/18(金) 22:15:10[プロジェクト]-[プロパティ]-[構成プロパティ]-[デバッグ]-[作業ディレクトリ]
0812デフォルトの名無しさん
2008/04/18(金) 22:41:28とブーストとかSTL portとか入れればどれでも使えますか?
32bit環境で、64bit整数のビット演算、掛け算の速度をかなり速いです
使い物になるので使いたいのですが互換性はなかなかあるんですか
0813デフォルトの名無しさん
2008/04/18(金) 22:42:11エスパーでおねがいします
0814デフォルトの名無しさん
2008/04/18(金) 22:55:180815デフォルトの名無しさん
2008/04/18(金) 22:56:44がんばってください
0816デフォルトの名無しさん
2008/04/18(金) 22:58:30> #include <stdint.h> はどの環境でも使えますか?
いいえ。
> とブーストとかSTL portとか入れればどれでも使えますか?
いいえ。
> 32bit環境で、64bit整数のビット演算、掛け算の速度をかなり速いです
いいえ。
> 使い物になるので使いたいのですが互換性はなかなかあるんですか
いいえ。
0817デフォルトの名無しさん
2008/04/18(金) 23:08:19コンピューターにものすごい興味がある赤ん坊のどちらかだな。
0818デフォルトの名無しさん
2008/04/18(金) 23:22:53初心者なのですが、いくつか質問させてください。
#include <stdint.h>はどの環境でも使えますか?
boostとかSTL portとかは、インストールすれば使えますか?
32bit環境で、64bit整数のビット演算、掛け算がかなり速くできて、
使い物になりそうなので使いたいのですが、互換性についてはどうでしょうか?
0819デフォルトの名無しさん
2008/04/18(金) 23:23:06// string >> wstring 変換関数(中身はダミー)
std::wstring A2WString(const std::string& strSource))
{
return std::wstring(L"out");
}
この変換関数での変換は以下のコードでできました.
std::vector<std::string> vtSource;
std::vector<std::wstring> vtDest;
vtSource.push_back( "AbC" );
std::transform( vtSource.begin(), vtSource.end(), std::inserter( vtDest, vtDest.end() ), A2WString );
しかし,変換関数にデフォルト引数があるとコンパイルエラーになりました.
std::wstring A2WString2(const std::string& strSource, int i=0)//デフォルト引数がある
{
return std::wstring(L"out");
}
transform 第4引数で bind2nd や ptr_fun を使用すればいいような気がするんですが,どのように書けばいいんでしょうか?
std::transform( vtSource.begin(), vtSource.end(), std::inserter( vtDest, vtDest.end() ),
std::bind2nd( std::ptr_fun(A2WString2), 0) );//コンパイルエラー
Window2000
Visual C++ 2005 express edition
0820デフォルトの名無しさん
2008/04/18(金) 23:26:01C++なら、Boostを入れると<boost/cstdint.hpp>が使える。
名前空間boostに入っていること以外はだいたいC99の<stdint.h>と同じ。
0821デフォルトの名無しさん
2008/04/18(金) 23:27:47いったん別の関数を挟めばいいはず。
inline std::wstring A2WStringHelper(const std::string& strSource)
{
return A2WString(strSource);
}
こういうものを作って、std::transformにはこれを渡す。
0822デフォルトの名無しさん
2008/04/18(金) 23:54:40IDC_STATIC.Caption("aaa");
で動かないんですけど
0823デフォルトの名無しさん
2008/04/19(土) 00:01:09GetDlgItem(IDC_STATIC)->Caption = "aaa";
これでも動きません
0824デフォルトの名無しさん
2008/04/19(土) 00:09:19IDC_STATICは言わばワイルドカードなので、
キャプションを変えたいスタティックテキストに個別のIDを割り当てる必要があります。
0825デフォルトの名無しさん
2008/04/19(土) 00:10:340826デフォルトの名無しさん
2008/04/19(土) 00:22:56GetDlgItem(IDC_STATICTIME)->Caption = "aaa"
error C2039: 'Caption' : 'CWnd' のメンバではありません。
となります
0827デフォルトの名無しさん
2008/04/19(土) 00:27:11これだと
error C2227: '->Caption' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
こういうエラーになります。
0828デフォルトの名無しさん
2008/04/19(土) 00:27:43なんでそんなにCaption大好きなの?
GetDlgItem(IDC_STATICIME)->SetWindowText("aaa");
0829デフォルトの名無しさん
2008/04/19(土) 00:30:40別に好きなわけじゃないんです
VBの時はこうやっていたので
プロパティの項目で設定できないのならVC++で項目の意味はあるんですか?
全部のプロパティの設定方法を調べなきゃいけないんでしょうか?
0830デフォルトの名無しさん
2008/04/19(土) 00:35:46あんなのは飾りだ。
0831デフォルトの名無しさん
2008/04/19(土) 00:39:07VCは他もみんなこんな感じだから、VBからだと慣れるしかないな。
プロパティのVisible項目→コーディング時はShowWindow();
0832デフォルトの名無しさん
2008/04/19(土) 00:44:010833デフォルトの名無しさん
2008/04/19(土) 00:55:430834デフォルトの名無しさん
2008/04/19(土) 01:08:42C++ のがいいかと。
0835819
2008/04/19(土) 01:46:47ただ,何でこれは通らないんでしょうか?
std::transform( vtSource.begin(), vtSource.end(), std::inserter( vtDest, vtDest.end() ),
std::bind2nd( std::ptr_fun(A2WString2), 0) );
A2WString2() の第一引数の参照型をやめたらこれでもコンパイルできましたが,
もしよろしければどなたかご教示願います….
//引数の参照型をやめる
std::wstring A2WString2(const std::string strSource, int i=0)
{
return std::wsting(L"out")
}
0836デフォルトの名無しさん
2008/04/19(土) 05:07:020837デフォルトの名無しさん
2008/04/19(土) 07:57:16どうして?
0838デフォルトの名無しさん
2008/04/19(土) 09:33:000839デフォルトの名無しさん
2008/04/19(土) 09:33:540840デフォルトの名無しさん
2008/04/19(土) 09:48:020841デフォルトの名無しさん
2008/04/19(土) 10:27:27それは有名な参照の参照問題
詳細はSTL バインダで検索して一番上あたりがそのものズバリだと思う
解決策だけ抜きだすとboostのfunctional.hppのboost::bind2ndを使う
さらにptr_funを使わずにboost::bind2nd(A2WString2)と書けるところも利点だ
0842デフォルトの名無しさん
2008/04/19(土) 11:43:18温室育ちが軍隊に入ったら周りが迷惑するだろ
0843デフォルトの名無しさん
2008/04/19(土) 11:48:42せめてど田舎とか電気が通ってないとかそういう表現にしないと
0844デフォルトの名無しさん
2008/04/19(土) 13:06:49まぁ、無理して比喩を使う必要はない場面だと思う。
0845デフォルトの名無しさん
2008/04/19(土) 14:05:310846デフォルトの名無しさん
2008/04/19(土) 14:06:52いまいちだな
0847デフォルトの名無しさん
2008/04/19(土) 14:58:24マニュアル車に乗る感じとか。
でもC/C++をちゃんと理解して使い始めるなら、良いと思う。
理解するフェーズで挫折する人は、諦めてもらって、
理解するフェーズを無視して使い始める人は氏ねば良いと思うよ。
0848デフォルトの名無しさん
2008/04/19(土) 15:10:550849デフォルトの名無しさん
2008/04/19(土) 15:20:180850デフォルトの名無しさん
2008/04/19(土) 15:21:01多言語から移ってきた人の3割くらいはこれかな・・・?
0851デフォルトの名無しさん
2008/04/19(土) 15:27:510852デフォルトの名無しさん
2008/04/19(土) 15:31:570853デフォルトの名無しさん
2008/04/19(土) 15:55:490854デフォルトの名無しさん
2008/04/20(日) 10:27:450855デフォルトの名無しさん
2008/04/20(日) 10:48:120856デフォルトの名無しさん
2008/04/20(日) 11:39:26同一の方法で展開することのできるライブラリってありませんか?
ファイルをチェックして適切なDLLへ渡すやつです。
0857デフォルトの名無しさん
2008/04/20(日) 12:11:41ファイル名で?ファイルの中身で?
0858デフォルトの名無しさん
2008/04/20(日) 12:12:580859デフォルトの名無しさん
2008/04/20(日) 12:20:41exeは知らない。アーカイブ本体をexe末端に付けてるか、
リソースとして持ってるか、とかの方式で変わってくるだろうし。
0860デフォルトの名無しさん
2008/04/20(日) 12:25:420861デフォルトの名無しさん
2008/04/20(日) 12:25:400862デフォルトの名無しさん
2008/04/20(日) 12:28:040863ミミ
2008/04/20(日) 13:10:19みなさんは名前を変えますか?どんな方法にしてますか?
[方法1]
Debug も Release も同じファイル名にして、ビルドすると上書きされるようにする。
[方法2]
Debug バージョンには _d のようなサフィックスを付ける。
some_d.exe hoge_d.lib など。
[方法3]
Debug と Release で出力フォルダを分ける。
bin/Debug/some.exe bin/Release/some.exe など。
0864デフォルトの名無しさん
2008/04/20(日) 13:23:48単独で動かす時はそれで十分やね。
他のアプリから利用する必要がある場合は方法2じゃないと都合が悪い。
方法1は論外っすね。
0865デフォルトの名無しさん
2008/04/20(日) 14:40:32そういうものがあるとしたら、そういうフリーのソフトが公開されている筈だよな。
そういう公開ソフトはないのだから、当然そういうDLLはない。
まぁ、>859にある「統合アーカイバ・プロジェクト」辺りを見てこいと。
0866デフォルトの名無しさん
2008/04/20(日) 15:20:460867デフォルトの名無しさん
2008/04/20(日) 17:28:14同じようになったことある人いる?いたら解決策とか教えて欲しいです。
症状としては、%fを含むprint系の関数(wsprintfとかvfprintf)を実行すると
「問題が発生したため〜」っていうおなじみのダイアログが出てきて落ちちゃうんです。
0868デフォルトの名無しさん
2008/04/20(日) 17:30:030869デフォルトの名無しさん
2008/04/20(日) 18:34:25外部からもらったバイナリBMPデータをどういじればいいのか分からん。。。
//---
PAINTSTRUCT psPaint;
HDC hWndDC;
HDC hMemDC;
HBITMAP hBitmap;
HGDIOBJ hGdiObj;
hWndDC = BeginPaint(g_hWnd, &psPaint);
hMemDC = CreateCompatibleDC(GetDC(g_hWnd));
hBitmap = CreateComptibleBitmap(hMemDC, 100, 100);
hGdiObj = SelectObject(hMemDC, hBitmap);
/* ここでバイナリをhBitmapに設定したい */
BitBlt(hWndDC, 0, 0, 100, 100, hMemDC, 0, 0, SRCCOPY);
//---
ビットマップバイナリをどうにかしてhBitmapに突っ込んでやれば良いのかと思ってるんだけど、
方法がわからん…
そもそも考え方が間違ってる?
0870デフォルトの名無しさん
2008/04/20(日) 18:45:57SetDIBits
0871デフォルトの名無しさん
2008/04/20(日) 18:59:480872デフォルトの名無しさん
2008/04/20(日) 19:08:32再現ソースとエラーを張れと何度いったことか
0873デフォルトの名無しさん
2008/04/20(日) 19:46:11再現コードの作成はちょっと全体の量も多いし見当もつかないので難しいです・・・。
関係あるとしたらどんなことが考えられるでしょうか?ロケールとか?
0874デフォルトの名無しさん
2008/04/20(日) 20:00:57スタックを壊したとか関数テーブルを壊したとか
多分バッファオーバーフローか未初期化ポインタを使って
アクセスしてはいけないメモリを壊した可能性が高い
0875デフォルトの名無しさん
2008/04/20(日) 20:01:01呼び出し規約とかランタイムとかリンクされるライブラリとか
なんかプロジェクトの設定いじったでしょ。それを直せばいい
0876デフォルトの名無しさん
2008/04/20(日) 20:45:31デバッグ版はインストール先のフォルダ。
リリース版はインストーラ作成のフォルダ。
0877デフォルトの名無しさん
2008/04/20(日) 21:22:45レスありがとうございます。以前できていたところがいじってないのに
急になったので875さんの臭いかも知れないけど、気づいたらなってしまってました・・・
BCCでやっててエラーメッセージを取得できる部分が見当たりません・・・。
こういう時ってどうやってメッセージを受け取るんでしょう?すいませんアホで・・
0878デフォルトの名無しさん
2008/04/20(日) 21:58:310879デフォルトの名無しさん
2008/04/20(日) 22:11:330880デフォルトの名無しさん
2008/04/20(日) 22:24:46printf系じゃないから%fとか無理
sprintfつかえ
0881デフォルトの名無しさん
2008/04/20(日) 22:29:260882デフォルトの名無しさん
2008/04/21(月) 01:09:03>>871
さんくす。
CreateDIBitmap使ってやってみたらいけた。
表示用のビットマップはCreateCompatibleBitmapで作って、
外部からもらったバイナリを描画するビットマップをCreateDIBitmapで作成
BitBltで転送して実装できたよ
ありがとう
0883デフォルトの名無しさん
2008/04/21(月) 20:49:40>>880-881ダメでした。あきらめます。
親切にレスしてくださった皆様、ありがとうございました
0884デフォルトの名無しさん
2008/04/21(月) 21:15:55で確保した領域はどこに存在するの?
delete[]しなければ、この確保した領域はプログラムが終了してもずっとそこに存在したままになるの?
0885デフォルトの名無しさん
2008/04/21(月) 21:18:33ヒープ領域のどこか
終了したらちゃんと解放される
一部されないOSもなくはない
0886デフォルトの名無しさん
2008/04/21(月) 21:38:02テンプレートクラスで例外を投げる時に使いたいんですが・・・
0887デフォルトの名無しさん
2008/04/21(月) 21:52:34boostのこの辺のが役に立つかもしれない
ttp://www.kmonos.net/alang/boost/classes/enable_if.html
0888デフォルトの名無しさん
2008/04/21(月) 22:10:44でも型名の取得は厳しいのかな・・・
0889デフォルトの名無しさん
2008/04/22(火) 01:38:20型名は取得できるのだけど、staticな処理じゃないんだよね。
なのでその用途だとtypeid使うのとあまり変わりない。
ttp://www.kmonos.net/alang/boost/classes/typeof.html
0890デフォルトの名無しさん
2008/04/22(火) 03:19:09型の完全名がカオスになって諦めがつくから。
0891デフォルトの名無しさん
2008/04/22(火) 04:20:31{
// TODO: ここにコントロール通知ハンドラ コードを追加します。
msgdlg aaae = new msgdlg();
aaae.Create(IDD_DIALOG1, this);
aaae.ShowWindow(SW_SHOW);
}
このボタンを押すとダイアログウィンドウが一瞬表示されたようにみえるのですが、表示されません。
SW_SHOWがいけないんでしょうか?
0892デフォルトの名無しさん
2008/04/22(火) 07:09:450893デフォルトの名無しさん
2008/04/22(火) 07:55:390894デフォルトの名無しさん
2008/04/22(火) 09:21:560895デフォルトの名無しさん
2008/04/22(火) 09:25:140896デフォルトの名無しさん
2008/04/22(火) 20:23:530897デフォルトの名無しさん
2008/04/22(火) 21:23:39xx func(const char* format, ...) {
char buf[256];
va_list args;
va_start(args,format);
vsprintf(buf, format, args);
va_end(args); // <=== これ必要なんですか?
...
}
0898デフォルトの名無しさん
2008/04/22(火) 21:30:350899デフォルトの名無しさん
2008/04/22(火) 21:32:480900デフォルトの名無しさん
2008/04/22(火) 21:49:24if(ret = 1){
int dt = 1;
}
みたいにしたら、
「真偽値として使われる代入のまわりでは、丸括弧の使用をお勧めします」
と言われたので、
if((ret = 1)){
int dt = 1;
}
みたいにしたら、許してもらえました。
なぜ ((ret = 1)) の方がよいのでしょうか??
0901デフォルトの名無しさん
2008/04/22(火) 21:52:09ret==1って書いたらその警告消えてくれるよ。
0902897
2008/04/22(火) 21:54:54ここのサンプルではva_end使ってないんです
http://msdn2.microsoft.com/ja-jp/library/28d5ce15(VS.80).aspx
そして、http://www.bohyoh.com/CandCPP/C/Library/vsprintf.html
ここに、「本関数は、va_endマクロを呼び出さない」 と記述があるんです
0903デフォルトの名無しさん
2008/04/22(火) 22:00:56==の間違いだったりしませんよね?大丈夫?っていう警告だからそういうもんだと思え
別に前の書き方でも問題ない
(())の方がよいというわけじゃない
0905デフォルトの名無しさん
2008/04/22(火) 22:28:34VCに限っていえばva_endマクロは何もしないから呼ばなくても問題はない。
しかし、他の処理系で動くとは限らない。
0906デフォルトの名無しさん
2008/04/22(火) 23:00:01書かなくてもいい環境が有るとはいえ、プログラムとしては書かないと駄目。
運悪く駄目なサンプルに当たったね。
0907デフォルトの名無しさん
2008/04/22(火) 23:05:39なるほど!
msgdlg aaae = new msgdlg();
をグローバル領域に持って行っても起動しました。
ポインタの理解が深まりました。ありがとう!
0908デフォルトの名無しさん
2008/04/22(火) 23:07:360909デフォルトの名無しさん
2008/04/22(火) 23:13:26「何か適当にいじったら動いた」
という奴か
0910デフォルトの名無しさん
2008/04/22(火) 23:14:27深まってない悪寒
0911デフォルトの名無しさん
2008/04/22(火) 23:15:55(だから、その変てこなのは後から馬鹿が弄ったんだってば ><)
0912デフォルトの名無しさん
2008/04/22(火) 23:18:30このコード、何度見ても謎が残りすぎ。
0913デフォルトの名無しさん
2008/04/22(火) 23:29:020914デフォルトの名無しさん
2008/04/22(火) 23:30:42C++の入門書か入門サイトをもう一度見て回った方が良いと思うぞ。
煽りとかじゃなくて本当に。基礎は大事だから。
とりあえず、理解する必要のあるキーワードとしては、
ポインタ、参照、自動変数、デストラクタ、delete、スコープ、スタック、ヒープ
あたりかな。
0915デフォルトの名無しさん
2008/04/22(火) 23:32:330916デフォルトの名無しさん
2008/04/23(水) 00:24:05作らないとだめですか?
0917デフォルトの名無しさん
2008/04/23(水) 00:25:050918デフォルトの名無しさん
2008/04/23(水) 00:30:02例えばこういうことならできる。
switch (value) {
int someVar;
case 0:
someVar = 0;
break;
case 1:
someVar = -1;
default:
someVar = value;
break;
}
0919デフォルトの名無しさん
2008/04/23(水) 00:35:00レベルアップした気分ですごく満足なのですが
もう一度新C++言語入門シニア編上下を読み直してみます・・・
が、ずばり一言でどこがおかしいですか?頭関係以外でおねがいします。
0920デフォルトの名無しさん
2008/04/23(水) 00:35:09ありがとうです。
918はやり方自体知らんかったス。
0921デフォルトの名無しさん
2008/04/23(水) 01:01:17頭関係以外で一言にまとめるには、対象が「少数」の「具体的なディテール」である必要がある。
でも君の場合、「基本的な抽象概念」の理解が「幾つも」欠けているように見受けられるから、まとめようがない。
だから>>914も困った挙げ句
> ポインタ、参照、自動変数、デストラクタ、delete、スコープ、スタック、ヒープあたり
という言い方になってるんだよ(これでも親切に用語を絞って挙げてるほう)。
0922デフォルトの名無しさん
2008/04/23(水) 02:37:20msgdlg aaae; //○msgdlg型の変数
msgdlg aaae = new msgdlg(); //×msgdlg型の変数にmsgdlg*型の値を代入
msgdlg *aaae = new msgdlg(); //○msgdlg*型の変数にmsgdlg*型の値を代入
一言でいうと,どこがイコールよ?
0923デフォルトの名無しさん
2008/04/23(水) 07:18:54void CtimerDlg::OnBnClickedButton2()
{
// new msgdlg() → msgdlgのインスタンスをヒープに確保。
//
// msgdlg aaae = ... → msgdlgのインスタンスをスタックに確保して、
// msgdlg(msgdlg* ptr)に適合するコンストラクタで初期化。(※1)
msgdlg aaae = new msgdlg();
...
// 自動変数のaaaeがスコープから外れるのでデストラクタが呼ばれ、
// aaaaが保持していたウィンドウなどが削除される。
//
// (※1)のポインタptrをdeleteしていなければメモリリーク。
}
が理解出来ていないように見える。
作りたいのがモーダルダイアログなら、
{
msgdlg aaae;
aaae.Create(IDD_DIALOG1, this);
aaaa.DoModal();
}
関数を抜けてもmsgdlgを保持するなら、
グローバルでなくCtimerDlgのメンバにする。
0924デフォルトの名無しさん
2008/04/23(水) 07:20:43× aaaa
○ aaae
0925デフォルトの名無しさん
2008/04/23(水) 09:41:18unsigned char x : 50;
のように元の型を超えていても定義できますか?
0926デフォルトの名無しさん
2008/04/23(水) 09:43:54あと、38bitの部分は、=で比較できますか? 無理な場合、別の方法はないでしょうか
0927デフォルトの名無しさん
2008/04/23(水) 09:51:2833 + 7 ではないですよね?
class A{
public:
bitset<33> a;
char b : 7;
};
0928デフォルトの名無しさん
2008/04/23(水) 10:06:17これで長い列に変換出来ました
bitset<40> *p;
unsigned char s[5]={1,255,1,255,128};
p=(bitset<40>*)&s;
cout<< *p;
0929デフォルトの名無しさん
2008/04/23(水) 10:53:080930デフォルトの名無しさん
2008/04/23(水) 11:16:25ありがとうございます。すごくよくわかりました。
void CtimerDlg::OnBnClickedButton2()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。
int a =0;
while(a < 100){
msgdlg *aaae = new msgdlg[100];
aaae[a]->Create(IDD_DIALOG1, this); // エラー
aaae[a]->ShowWindow(SW_SHOW);
aaae[a]->OnBnClickedOk();
delete aaae[a];
a++;
}
}
error C2819: クラス 'msgdlg' にはオーバーロードされたメンバ 'operator ->' がありません。
これは何がいけないんでしょうか?
0931デフォルトの名無しさん
2008/04/23(水) 11:32:26メモリリークが起きてしまっているようで解決方法が見つからず困っています。
STLなどの場合、確保したメモリを明示的に解放する関数などがあるのでしょうか?
( aaa.clear() や aaa.~vector() などは試してみたのですが駄目でした)
それとも test::aaa 自体も new で確保して delete で解放したほうが良いのでしょうか?
環境はVC++2005です、よろしくお願いします。
class base {
public:
~base(){ destory(); }
virtual void destory(){};
};
class test : base {
public:
std::vector< int > aaa;
void destory(){ aaa.clear(); }
};
void main(){
void *p;
{
test *ptest;
ptest = new test;
ptest->aaa.resize(100);
p = (void*)ptest;
}
//ここではポインタ p の基本クラスが base ということ以外はわからない
delete (base*)p;
}
0932デフォルトの名無しさん
2008/04/23(水) 11:39:010933デフォルトの名無しさん
2008/04/23(水) 11:42:12スマートポインタ使ってないとか馬鹿じゃねーの?
いやいや、馬鹿じゃないって。
デストラクタの中から仮想関数呼び出すのはさすがにないけど。
0934デフォルトの名無しさん
2008/04/23(水) 11:44:25これはひどい
0935デフォルトの名無しさん
2008/04/23(水) 11:57:28既に test::destory の実体はなくなっているからでしょうか?
馬鹿ですみません…
こういう場合、クラスtestで確保したメモリは
どう解放したら良いのでしょうか?
0936デフォルトの名無しさん
2008/04/23(水) 11:59:40スマートポインタで調べてみます。
0937デフォルトの名無しさん
2008/04/23(水) 12:31:15testに自分のdestoryを呼ぶデストラクタを書けば
baseのデストラクタの最初でtestのデストラクタが呼ばれて、testのdetoryが呼び出されるため
この場合はmain内部の変更無しでメモリリークがなくなるけど、それじゃ駄目なの?
0938デフォルトの名無しさん
2008/04/23(水) 13:22:22ありがとうございます、無事に解放されるようになりました。
いろいろと勉強不足でした。
仮想デストラクタにしないと派生クラスのデストラクタが呼び出されないのはもちろん
メンバ変数のデストラクタも呼び出されないということ(?)なんですね。
0939デフォルトの名無しさん
2008/04/23(水) 13:39:34詳しくは覚えてないが、デストラクタが仮想関数(virtual)であれば、delete演算子が
渡されたポインタから仮想関数テーブルを辿って継承関係を把握できるとか
だったと思う(逆に言えば仮想関数でないと把握できない)。
ちなみに勘違いしてそうなので書いておくけど、デストラクタとは
~クラス名();←引数無し
のこと。destroyとか勝手に名前つけたらそれはただのメンバ関数だよ。
この場合正しくは virtual ~base();とかだ。
0940デフォルトの名無しさん
2008/04/23(水) 13:43:430941デフォルトの名無しさん
2008/04/23(水) 14:11:20virtual指定はなんだか漠然としていて理解しにくかったですが
なんとなくはどう動作するかが理解できました。
ありがとうございます。
0942デフォルトの名無しさん
2008/04/23(水) 14:16:49下のソースはコンパイル可能
行数減らしたから少し見辛いかも
>>914の言うようにポインタと参照について学んだ方がいい
struct CTest{ void test(){} };
void f(){
CTest a;
CTest* b = new CTest();
CTest* c = new CTest[1];
CTest d[1];
a.test(); (*&a).test(); (&a)->test(); (&a)[0].test();
(*b).test(); b->test(); b[0].test();
(*c).test(); c->test(); c[0].test();
(*d).test(); d->test(); d[0].test();
delete b;
delete[] c;
}
0943デフォルトの名無しさん
2008/04/23(水) 14:47:49感動しました。こんなにわかりやすいの初めてみました。がんばります!
0944デフォルトの名無しさん
2008/04/23(水) 15:37:22上手い方法を教えてもらいたくて質問します。
ある文字列があって
1文字ずつ処理していくんですが、
何か文字に変化があった時だけ処理を行いたいのです。
char str[]="ああいうええお";//何か文字列
int len=strlen(str);
char current_c;
current_c=str[0];//内容を覚える
for(int i=0; i<len; i++){
if(current_c!=str[i]){//連続している文字が変われば
//処理
}
}
こんなのを思いついたんですが
これだと、1つ目の文字が当然処理されません。
current_c=str[0];//内容を覚える
これを
current_c=str[0]+1;//内容を覚える
として、必ず1回目は処理が行われるようにするのも考えたんですが
もっとちゃんとしたスマートな方法があると思うんですが・・・
こういう場合、どうやるのが一般的なのでしょうか?
0945デフォルトの名無しさん
2008/04/23(水) 15:46:250946デフォルトの名無しさん
2008/04/23(水) 15:48:09charは1バイトだから平仮名みたいな多バイト文字はうまくゆかないよ。
分かっているならごめん。
0947デフォルトの名無しさん
2008/04/23(水) 16:11:330に相当する文字が来た時に駄目でしょ。
0948デフォルトの名無しさん
2008/04/23(水) 16:12:08typedef char val_t;
val_t str[]="aabbbcccddee";
typedef val_t* iter_t;
for(iter_t begin=str,end=str+strlen(str),back,it=begin; it!=end; ++it){
if(it==begin || *back!=*it){
//処理
back=it;
}
}
(・∀・)
0949デフォルトの名無しさん
2008/04/23(水) 16:13:42それはひょっとしてギャグでいってるのか・・・・
0950デフォルトの名無しさん
2008/04/23(水) 16:19:37最初に1文字目と異なる値 str[0]+1 で初期化しとけば良いんじゃね?
ってのは結構頭の良い発想。凡百の徒には嫌われるけどね。
でもそういうときの current_c は普通 prev_c だな。
0951デフォルトの名無しさん
2008/04/23(水) 16:22:12そうか?ムダじゃね?
0952デフォルトの名無しさん
2008/04/23(水) 16:33:500953948
2008/04/23(水) 16:41:36bool operator!=(const CTest& o){
// ...
return true;
}
};
template<typename iter_t> void unique_each(iter_t begin, iter_t end){
for(iter_t back,it=begin; it!=end; ++it){
if(it==begin || *back!=*it){
//処理
back=it;
}
}
}
void f(){
CTest v[10];
// v[0] ...
unique_each(v,v+sizeof(v)/sizeof(*v));
}
(∩゜д゜)アーアーきこえなーい
0954デフォルトの名無しさん
2008/04/23(水) 16:46:59今回は文字だから 0 にしときゃ良いけど、
一般に先頭要素または直前のと異なる要素を
判定していくには良い方法だよ。
0955デフォルトの名無しさん
2008/04/23(水) 16:58:36nul終端文字列
>>947の前提条件
文字列
>>950の前提条件
コピーコンストラクタ
operator+
operator!=
を持っている型
>>953の前提条件
operator!=
を持っている型
0956デフォルトの名無しさん
2008/04/23(水) 17:04:34もう>>944とは別世界に行ってるなw
0957デフォルトの名無しさん
2008/04/23(水) 17:31:55そういうデバッグの仕方はC++では難しいのでしょうか。
0958デフォルトの名無しさん
2008/04/23(水) 17:32:34>>945 一番シンプル
>>946 一番重要なレスw
>>953 汎用化し杉ワロタw
0959デフォルトの名無しさん
2008/04/23(水) 17:44:15#include <algorithm>
#include <string>
#include <iostream>
#include <functional>
int main() {
std::wstring src = L"ああいうええお";
src.push_back(0);
::setlocale(LC_ALL, "ja_JP.UTF-8");
for (std::wstring::iterator i = src.begin(); *i != 0; ++i) {
i = std::adjacent_find(i, src.end(), std::not_equal_to<wchar_t>());
std::wcout << i-src.begin() << *i << std::endl;;
}
}
終端一つ加えて条件が逆のadjacent_find
>>957
エスパーするとコードを読ませて実行時に一時的な値を見るとかならデバッガ
gdbとVC付属のやつとか
0960デフォルトの名無しさん
2008/04/23(水) 17:44:31+1すると、オーバーする。
>>945は、処理内容次第では、\0がいきなり来た場合にヤバい。
が、あのプログラムの場合strlenの値がループの実行回数だからOK
>953は、恐らく>>944が本当に必要だったものではない可能性が高いw
0961デフォルトの名無しさん
2008/04/23(水) 17:47:00なるほどデバッガで変数に格納されてる値を見ることが出来るんですね。
ありがとうございましたm(_ _)m
0962デフォルトの名無しさん
2008/04/23(水) 17:51:55>+1すると、オーバーする。
するってーと current_c=~str[0]; が適切?
0963デフォルトの名無しさん
2008/04/23(水) 17:53:430964デフォルトの名無しさん
2008/04/23(水) 17:55:390965デフォルトの名無しさん
2008/04/23(水) 17:56:06実動はともかく、規格的にはアウトだろ
0966959
2008/04/23(水) 18:12:21#include <algorithm>
#include <string>
#include <iostream>
#include <functional>
int main() {
std::wstring src = L"ああいうええお";
::setlocale(LC_ALL, "ja_JP.UTF-8");
std::wstring::iterator i = src.begin();
if (!src.empty()) {
do {
std::wcout << *i << std::distance(src.begin(), i) << std::endl;
i = std::adjacent_find(i, src.end(), std::not_equal_to<wchar_t>());
} while(i++ != src.end());
}
}
0967デフォルトの名無しさん
2008/04/23(水) 18:15:310968デフォルトの名無しさん
2008/04/23(水) 19:01:21vector<vector<string> > vecStrDim;
vector<string> vecStr;
string strTest = "test";
vecStr.push_back(strTest);
vecStrDim[0].push_back(vecStr);
とやってみました。コンパイルは通るのですが
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
とでて実行してもデバッグエラーになります
vecStrDim[0].push_back(vecStr);が悪いのはわかるのですが、方法が思いつきません
どうすればデバッグエラーを対処できるのでしょうか?
0969デフォルトの名無しさん
2008/04/23(水) 19:06:06×vecStrDim[0].push_back(vecStr);
○vecStrDim.push_back(vecStr);
0970デフォルトの名無しさん
2008/04/23(水) 19:10:40あわわ……とんでもなく馬鹿なことしてすみません
解決しました
0971デフォルトの名無しさん
2008/04/23(水) 19:14:360972デフォルトの名無しさん
2008/04/23(水) 19:29:140973デフォルトの名無しさん
2008/04/23(水) 20:44:510974デフォルトの名無しさん
2008/04/24(木) 00:27:080975デフォルトの名無しさん
2008/04/24(木) 00:49:34void main(void)
{
int a;
pirntf("何か入力してください\n\n");
scanf("%d",&a);
while(1){
printf("ぐははははははは!!\n\a");
}
}
この程度しか俺は中なので書けません。プログラマーさん
お願いします。
0976デフォルトの名無しさん
2008/04/24(木) 00:50:21#include<stdio.h>
void main(void)
{
int a,b,c;
printf("数字を入力してください\n");
scanf("%d",&a);
printf("数字をまた入力してください\n");
rewind(stdin);
scanf("%d",&b);
printf("数字をまたまた入力してください\n");
scanf("%d",&c);
if(a == b == c)
printf("等しいです,\n");
else
printf("等しくないです,\n");
}
これでa==b==cだったら"等しい"と表示させるように組んでるのに 1、1、1以外の数字は入力してもは全部"等しくないです"になるのは
なんででしょうか?
0977デフォルトの名無しさん
2008/04/24(木) 00:52:43a == b == c は、(a == b) == c と解釈される。つまり、使い方が間違っている。
その場合、恐らくa == b && b == c でいいだろう。
0978デフォルトの名無しさん
2008/04/24(木) 00:57:130979デフォルトの名無しさん
2008/04/24(木) 00:59:27おおwなるほど!
ありがとうございました^^
0980デフォルトの名無しさん
2008/04/24(木) 01:11:370981デフォルトの名無しさん
2008/04/24(木) 01:14:03移動前のスレのコメントにもありましたが、
「君が参考にしてるものは信用しないほうがいい」
です。void main(...) はまずい。
0982デフォルトの名無しさん
2008/04/24(木) 01:17:45gcc だと警告ですむけど。
0983981
2008/04/24(木) 01:34:220984デフォルトの名無しさん
2008/04/24(木) 03:35:46ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6318.cpp
でひとつひとつ探す方法はあるのですが
他の方法で、まず
1〜50までの個数と51〜100までの個数を数えて
1〜50が49個
51〜100が50個で1〜50にあるとして
次は1〜25、26〜50とどんどん減らして
26〜38と39〜50の割り切れないときは13と12にしたりなどして
最後2つの数字にし
48が1個
49が0個で49がない数字とするプログラムを作りたいのですが
どなたか例みたいなものを書いていただけないでしょうか?
0985デフォルトの名無しさん
2008/04/24(木) 03:41:230986デフォルトの名無しさん
2008/04/24(木) 03:42:370987デフォルトの名無しさん
2008/04/24(木) 03:48:07#include<stdio.h>
#define N 100
int main(void){
int min , max , mid;
int count1, count2;
int data, i;
FILE *fp
ここまでの指定はあるのですが、今自力でやってみてるんですが
どう二つに分けそれ以降どのように区切っていけばいいのかよくわからないんです
0988デフォルトの名無しさん
2008/04/24(木) 04:42:58再帰呼び出しを使うのが良いよ
0989988
2008/04/24(木) 04:46:090990デフォルトの名無しさん
2008/04/24(木) 04:54:260991デフォルトの名無しさん
2008/04/24(木) 05:18:22//trueならmidより上、falseなら下
bool hilow(int min, int mid, int max,
std::vector<int> src, std::vector<int> dst)
{
dst.clear();
std::vector<int> hi, low;
//中間数超と以下でhi, lowに分ける
for(size_t c=min; c <= max; c++) {
if(src[c] <= mid) low.push_back(src[c]);
else hi.push_back(src[c]);
}
//個数が規定値か調べて多い方を返す
if(hi.size() == max - mid ) {
dst.swap(hi);
return ture;
}
dst.swap(low);
return false;
}
続く
0992デフォルトの名無しさん
2008/04/24(木) 05:33:54void main() {
std::vector<int> num;
//ファイルからnumに一度全部読み込む
//ここは自分で書けるでしょ?
int min, mid, max;
min = 1;
max = 100;
do {
(max - min + 1) % 2 ? mid = (max - min + 1) / 2 + 1 : mid = (max - min + 1) / 2;
if( hilow(min, mid, max, num, num) ) min = mid + 1;
else max = mid;
} while(max - min > 2);
//完了
}
0993デフォルトの名無しさん
2008/04/24(木) 05:36:05bool hilow(int min, int mid, int max,
std::vector<int>& src, std::vector<int>& dst)
dst.clear(); は無し
f(hi.size() == max - mid ) {
dst.swap(low);
return false;
}
dst.swap(hi);
return true;
}
0994デフォルトの名無しさん
2008/04/24(木) 05:37:10中間の出し方は微妙に間違ってるかもしれんので、自分で検証してね。
0995デフォルトの名無しさん
2008/04/24(木) 05:56:210996デフォルトの名無しさん
2008/04/24(木) 06:00:08「1Lとは」などで検索したのですが見つかりません。
環境はC++、BCCです。どなたか回答頂ければ幸いです。
0997デフォルトの名無しさん
2008/04/24(木) 06:09:58整数のあとにつくLはlong intであることを表す。
10はintの10。10Lはlong intの10。
0998デフォルトの名無しさん
2008/04/24(木) 06:31:33ありがとうございます!
long intをキーワードに検索したら大体わかってきました。
long intを代入するときはLをつけるという解釈であってますか?
0999デフォルトの名無しさん
2008/04/24(木) 06:39:421 は int型
'1' は char型
1.0 は double型
1L は long型
1000デフォルトの名無しさん
2008/04/24(木) 06:49:16詳しい説明でよくわかりました(多分)。
単なる1でも勝手にintにされてるんですね。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。