【初心者歓迎】C/C++室 Ver.102【環境依存OK】 at TECH
【初心者歓迎】C/C++室 Ver.102【環境依存OK】 - 暇つぶし2ch985:デフォルトの名無しさん
18/06/24 23:08:30.10 8StK2ZXu.net
>>966
もらい受けたいところだけども、意味が理解できるかどうか? あなたは意味が
わかりますか?
clsA() : clsA((const char* const []){"mike","tetu",nullptr}) {};
(const char* const []){"mike","tetu",nullptr}
これは何を意味してるの?

986:デフォルトの名無しさん
18/06/24 23:09:16.86 chBT6m1a.net
「c++ constexpr 文字列」で検索すれば?

987:デフォルトの名無しさん
18/06/25 00:15:08.68 RQXh1ivn.net
void func1(int a) { printf("%d\n", a); }
void func2(int a, int b) { printf("%d,%d\n", a, b);}
template<?????>
class Test
{
public:
void method(void) { (templateの引数で func1(int a) か func2(int a, in b)を呼ぶ) }
private:
int a;
in b;
};
のような事をしたいのですが、引数が1つか2つの関数をそれぞれ名前でtemplate引数にして
記述したいのですが、うまくいきません。どうすれば良いでしょうか?
例えば template < void F(int)> とすると Test<func1>() でいけるのですが、func2の場合が
表現出来ません。

988:デフォルトの名無しさん
18/06/25 01:49:02.18 Gwlgg6/B.net
class class1 {
private: int m_a;
public:
class1(int a) : m_a(a) {}
class1(class1 const& rhs) { m_a = rhs.m_a; }
void method(void) { printf("%d\n", m_a); }
};
class class2 {
private: int m_a;
int m_b;
public:
class2(int a, int b) : m_a(a), m_b(b) {}
class2(class2 const& rhs) { m_a = rhs.m_a; m_b = rhs.m_b; }
void method(void) { printf("%d,%d\n", m_a, m_b); }
};
template<class _Myclass> class Test {
private: _Myclass m_myClass;
public:
Test(_Myclass myClass) : m_myClass(myClass) {}
void method(void) { m_myClass.method(); }
};
int main() {
Test<class1> x(class1(1));
Test<class2> y(class2(2, 3));
x.method();
y.method();
}
意味があるのか分からないがとりあえずコレで
もしくはTest::methodを可変引数にしてprintfにその可変引数を渡すしかない
まずなにがやりたいのか分からないからテキトーに書いてやったぞ

989:デフォルトの名無しさん
18/06/25 03:37:15.06 3f3crQyZ.net
const char *[]の初期化だけれども
clsA(const char* const name[]) : m_name(name) {};
これはまあ何となく意味が解る。m_name <--nameってことだよね。
clsA() : clsA((const char* const []){"mike","tetu",nullptr}) {};
しかしこれはどういう意味だろうか?
clsA <-- (const char* const []){"mike","tetu",nullptr}
ラムダ関数?かとおもったが、前半はcastだろうか?
m_name <--name
clsA <-- {"mike","tetu",nullptr}
この二つがセットで意味を持つんだろうな。
const char *[] の初期化が3つくらいあったらどうするんだろうね。
まるでクイズを解いてるみたいだよ。
いくらなんでも言語仕様としてやはり不味いよね。

990:デフォルトの名無しさん
18/06/25 04:00:03.54 3f3crQyZ.net
わかった。コンストラクタに引数がないディフォールトでは
clsA <-- {"mike","tetu",nullptr}
そしてm_nameは一つしかないから、m_name= {"mike","tetu",nullptr}となる。
引数を持つ場合は
clsA(const char* const name[]) : m_name(name) {};
m_name <-- name;
になる。
じゃあconstのメンバ変数が二つある場合はどうするんだろうか?
clsA:clsA( {"xxx"}),clsA({"yyy"})
{}
とは書けない。変数を明示しないといけないから、、、
clsA:m_name1( {"xxx","abc"}), m_name2({"yyy","def"}){}
必然的にとなる。
じゃあ最初から
clsA:m_name1( {"xxx","abc"}){}
こう書いていた方が分かりやすいし、これが成り立たないと論理破綻する。

991:デフォルトの名無しさん
18/06/25 04:04:26.64 3f3crQyZ.net
class clsA{
private:
const char* const* m_name1;
const char* const* m_name2;
public:
clsA() : m_name1((const char* const []){"mike","tetu",nullptr}), m_name2((const char* const []){"mike2","tetu2",nullptr}) {};
clsA(const char* const name[]) : m_name1(name) {};
void put(){
for(const char* const * p=m_name1; *p!=nullptr ;++p ) {
printf(*p);
}
};
virtual ~clsA() {};
};
実験したみたが、コンパイルは通った。

992:デフォルトの名無しさん
18/06/25 05:56:57.36 MAmRCfEQ.net
>>964のソースをclangでビルドしたら最初の結果が文字化けする。
環境依存で動作が変わるようなソースコードを参考にしてはいけない。

993:デフォルトの名無しさん
18/06/26 09:01:37.25 6tjGTw22.net
>>969
template<class ... args>
class clsTest {
public:
void func1(int dt) {}
void func1(int dt1, int dt2) {}
void func2(args...) {
}
};
int main()
{
clsTest<int, int, int> a;
clsTest<int, int, char *> b;
a.func2(2, 3, 4);
b.func2(5, 6, (char *)"test");
a.func1(2);
a.func1(2, 3);
return 0;
}

994:デフォルトの名無しさん
18/06/28 10:37:33.14 dRU/pr3A.net
c++です
LNK2005 DllMain は既に vstplugmain.obj で定義されています
1>vstplugmain.obj : error LNK2005: DllMain は既に vstplugmain.obj で定義されています。
左と右が違うファイルだったら順序を入れ替えるだけでよかったのですが
両方vstplugmain.objで困ってます
どのようにすれば解決できるでしょうか?

995:デフォルトの名無しさん
18/06/28 11:09:44.92 9ql/FcZD.net
自動でリンクしてるライブラリと明示的にリンカに渡


996:してるパス違いの同じライブラリで衝突してんんじゃないの? 知らんけど



997:デフォルトの名無しさん
18/06/28 11:44:03.03 dRU/pr3A.net
検索してみたのですが
vstplugmain.objは一つしか無いようです

998:デフォルトの名無しさん
18/06/28 12:06:53.39 dRU/pr3A.net
もしかしたら関係あるのかもしれないので参考までに記述します
以下のようなエラーも同時に発生しています
vstplugmain.obj : error LNK2001: 外部シンボル ""class AudioEffect * __cdecl createEffectInstance(__int64 (__cdecl*)(struct AEffect *,int,int,__int64,void *,float))"
(?createEffectInstance@@YAPEAVAudioEffect@@P6A_JPEAUAEffect@@HH_JPEAXM@Z@Z)" は未解決です。
LNK2001 外部シンボル ""class AudioEffect * __cdecl createEffectInstance(__int64 (__cdecl*)(struct AEffect *,int,int,__int64,void *,float))"
(?createEffectInstance@@YAPEAVAudioEffect@@P6A_JPEAUAEffect@@HH_JPEAXM@Z@Z)" は未解決です。 Dll6 source\repos\Dll6\Dll6\vstplugmain.obj 1

よろしくおねがいします

999:デフォルトの名無しさん
18/06/28 17:14:50.29 hh115pnF.net
エラーログの上から順番に解決するようにしたらいい

1000:デフォルトの名無しさん
18/06/29 09:50:56.72 8ZX2E7EU.net
無事解決しました
ありがとうございました

1001:デフォルトの名無しさん
18/06/29 10:22:32.55 h8zo0ENm.net
>>981
そういう場合は、経緯を説明するのが、考えようとしてくれた人への礼儀。

1002:デフォルトの名無しさん
18/06/29 10:53:16.69 OiiVA+37.net
ロベールのC++の本の typedef の説明ですが、よく分かりません。
typedef int* IntPtr;
int n = 0;
const IntPtr p = &n;
IntPtr const q = &n;
はどちらも、
int* const p;
int* const q;
の意味になるそうです。
分からないのは、ロベールさんの解釈の部分です。
const int* p; → 「const の右側にあるものが const になる」
int* const q; → 「const の右側にあるものが const になる」
と解釈すればよいと説明してます。
この解釈が
const IntPtr
IntPtr const
の場合にも通用するというのです。

1003:デフォルトの名無しさん
18/06/29 10:53:56.86 OiiVA+37.net
const IntPtr = const int*
IntPtr const = int* const
ではないのでしょうか?

1004:デフォルトの名無しさん
18/06/29 10:55:12.72 OiiVA+37.net
const IntPtr p = &n;
IntPtr const q = &n;
↑「const の右にあるのは p や q なので、 p や q が const になるのです。」
と説明していますが、これが意味不明です。

1005:デフォルトの名無しさん
18/06/29 10:56:58.22 OiiVA+37.net
>>985
の論法を↓に適用すれば、
const の右にあるのは p や q なので、 p や q が const になるのです。
となってしまいますが、 p は const ではないですよね。
q は const ですが。
const int* p;
int* const q;

1006:デフォルトの名無しさん
18/06/29 11:34:56.01 rwm1MJ+D.net
>>983
マクロで IntPtr を int * と定義した場合は >>984 のように展開されるけど
typedef はマクロじゃないので int * 型のシノニムとして IntPtr 型を作る
const int と int const もどちらも const の int であるのと同じように
int を IntPtr 型に置き換えて考えれば どちらも int * const と同じ意味になると思うよ

1007:デフォルトの名無しさん
18/06/29 12:00:29.81 nFp4wdEK.net
i.csvには1行に名前と整数値で点数3つ書かれているのが10行あり、読み込んで点数の和を加えて表示しようとしましたが和が出てきません。また¥nを打っているのに改行されないです。理由を教えてください。配列にしたのはこの後にも操作をするためです。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
const char ifname[] ="i.csv";
int a,b,c;
char name[30][100];
int sum[30];
int i;
FILE *ifp;
ifp=fopen(ifname,"r"); /*読み込み込みモードでopen*/
if(ifp==NULL){
printf("ファイルが開けない");
exit(1);
}
for(i=0;i<=29;i++){
if(fscanf(ifp,"%s%d%d%d",name[i],&a,&b,&c)==EOF)
break;
else
sum[i]=a+b+c;
printf("%s %d %d %d %d\n",name[i],a,b,c,sum[i]);
}
fclose(ifp);
}

1008:デフォルトの名無しさん
18/06/29 12:06:09.83 nFp4wdEK.net
10行ではなく30行でした、すみません

1009:デフォルトの名無しさん
18/06/29 12:10:17.92 OiiVA+37.net
>>987
ありがとうございました。

1010:デフォルトの名無しさん
18/06/29 12:40:26.79 nFp4wdEK.net
988ですが自力で解決出来たので大丈夫です

1011:デフォルトの名無しさん
18/06/29 14:45:38.42 +YHimQiw.net
Windows10で、デスクトップのアイコンと壁紙の間のレイヤーに描画したいです。
どのように設定すればいいでしょうか?
VisualStudio2017/C++

1012:デフォルトの名無しさん
18/06/29 14:50:24.25 +YHimQiw.net
何がしたいかというと、カレンダーを表示させたいです。

1013:デフォルトの名無しさん
18/06/29 14:52:35.06 +YHimQiw.net
小出しですみません。カレンダー機能はMFCで作成済みです。

1014:デフォルトの名無しさん
18/06/29 22:49:34.96 DjTQOr6S.net
無理でしょうか?

1015:デフォルトの名無しさん
18/06/29 23:03:37.60 DjTQOr6S.net
C#ですが、方法が見つかったので自力でやってみます。
URLリンク(www.codeproject.com)

1016:デフォルトの名無しさん
18/07/01 01:14:10.80 UA/DrxK6.net


1017:デフォルトの名無しさん
18/07/01 01:14:30.62 UA/DrxK6.net


1018:デフォルトの名無しさん
18/07/01 01:14:47.85 UA/DrxK6.net


1019:小倉優子
18/07/01 01:15:06.26 UA/DrxK6.net
  ∧,,,∧ 
 (  ・∀・) 1000ならジュースでも飲むか
  (    ) 
  し─J 

1020:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 238日 8時間 41分 31秒

1021:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch