C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: C++/CLI Stopwatchについて


(過去ログ 107 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■63694 / inTopicNo.1)  C++/CLI Stopwatchについて
  
□投稿者/ abcYear (1回)-(2012/09/27(Thu) 22:48:37)

分類:[C++/CLI] 

お世話になります。
今C++/CLIでdllを作成しようとしております。

そのため下記リンク先を参考にまずはクラス化を行っていました。
http://imagingsolution.blog107.fc2.com/blog-entry-263.html

しかし起動時から時間を測る必要があるため、Stopwatchクラスを使おうとクラスのpublicに下記宣言をしたのですがエラーが発生しました。
static Stopwatch watch;

エラー内容:
error C2146: 構文エラー : ';' が、識別子 'watch' の前に必要です。
error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません

グローバルの宣言だけでなく、関数のローカル変数と宣言をしても同じ内容が発生します。using namespaceを外すと問題なくなるのですが原因はいったいなんでしょうか?

どれだけ調べてもわかりませんでしたので
お力をお貸しください。よろしくお願いいたします。
引用返信 編集キー/
■63698 / inTopicNo.2)  Re[1]: C++/CLI Stopwatchについて
□投稿者/ Azulean (41回)-(2012/09/27(Thu) 23:58:42)
よくわかりません。

No63694 (abcYear さん) に返信
> エラー内容:
> error C2146: 構文エラー : ';' が、識別子 'watch' の前に必要です。
> error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません

Stopwatch が型として認識されていないのでしょう


> using namespaceを外すと問題なくなるのですが原因はいったいなんでしょうか?

これがよくわかりません。
問題のコードはどの名前空間に対してどのような操作をしており、「using namespace を外す」とはどのような名前空間を外しているのでしょうか。

ちなみに、Stopwatch クラスは System.Diagnostics 名前空間なのでそれを参照している必要がありますが。
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.stopwatch.aspx
引用返信 編集キー/
■63702 / inTopicNo.3)  Re[2]: C++/CLI Stopwatchについて
□投稿者/ 774RR (3回)-(2012/09/28(Fri) 12:57:52)
質問文だけからではよくわからんけど
void func1() {
  System::Diagnostics::Stopwatch sw;
}
は、俺のところではコンパイル通る (VS2005) ので、これすら通らないのであれば環境側の原因

void func2() {
  static System::Diagnostics::Stopwatch sw;
}
としてしまうと、これは C3145 になる(仕様どおり)

void func3() {
  Stopwatch sw;
}
と書きたいのであれば using namespace System::Diagnostics; は必須。
グローバルスコープに書くか func3() { .. } のカッコ内に書くかは別問題。

引用返信 編集キー/
■63706 / inTopicNo.4)  Re[3]: C++/CLI Stopwatchについて
□投稿者/ abcYear (2回)-(2012/09/29(Sat) 13:32:17)
お二方、ご回答をいただき誠にありがとうございます。
また質問に対する説明不足大変申し訳ございません。

まず環境設定について述べさせていただきます。
構成の種類は「ダイナミックライブラリ(dll)」
共通言語ランタイムサポートは「共通言語ランタイムサポート(/clr)」

次にヘッダーファイル一部をお見せします。
#pragma once
using namespace System;
using namespace System::IO;
using namespace System::Text;
using namespace System::Diagnostics;

namespace aaa{
ref class abc
{
private:
static StreamWriter^ Writer;
static Stopwatch watch;
public:
void Init(void);
};
}

次にソースファイルですが
void Init(void);の関数の中に下記を入力しています。

Writer = gcnew StreamWriter(FilePath, false, System::Text::Encoding::Default);
watch = gcnew Stopwatch();
watch ->Start();

このような書き方を行うとエラーが発生してしまうので
確認のため関数の中で宣言もしてみようと試みましたがエラーが同様に発生しました。

void Init(void);の中に下記を入力してもダメです。
static Stopwatch watch = gcnew Stopwatch();

環境設定に問題があるのか記述に問題があるのか
原因がよくわかりません。
この説明で分かればいいのですが、ご教授いただけますようよろしくお願いいたします。

引用返信 編集キー/
■63707 / inTopicNo.5)  Re[4]: C++/CLI Stopwatchについて
□投稿者/ オショウ (21回)-(2012/09/29(Sat) 16:26:33)
2012/09/29(Sat) 16:27:15 編集(投稿者)

> 構成の種類は「ダイナミックライブラリ(dll)」
> 共通言語ランタイムサポートは「共通言語ランタイムサポート(/clr)」

  ええ〜と・・・
  プロジェクトを新規作成される時、VisualC++ の、CLR を選択したのちに
  クラスライブラリを選択して作成されましたか?

  それと、構成の種類は「ダイナミックライブラリ(dll)」と書かれてますが
  プロジェクトのテンプレートを自作追加していない限り、MFC DLL 以外に
  は、ダイナミックリンクライブラリと言う選択はありません。
  通常は、クラスライブラリですネ!

  尚且つ・・・
  ヘッダーファイルに
  static StreamWriter^ Writer;
  static Stopwatch watch;
  と宣言しても、.cpp側ではエラーしますヨ!
  .ccp側のクラスの中で宣言しないと・・・

  と言う簡単なミス?

以上。参考まで
引用返信 編集キー/
■63708 / inTopicNo.6)  Re[5]: C++/CLI Stopwatchについて
□投稿者/ abcYear (3回)-(2012/09/30(Sun) 00:05:51)
オショウ様
ご回答ありがとうございます。


改めて再度、プロジェクトを新規作成し、クラスライブラリを選択して作成しなおしました。
その後問題なく、ビルドが通りました。なぜか原因がわかりませんが。。。

また構成の種類を確認しましたが自動で「ダイナミックライブラリ(dll)」となっておりました。
これはこういうもの??ソース内の一番上にも作成時に下記コメントがありましたし。
//これは メイン DLL ファイルです。

しかし皆様の迅速な回答のおかげで解決することができました。
本当に感謝いたします。

解決済み
引用返信 編集キー/
■63709 / inTopicNo.7)  Re[6]: C++/CLI Stopwatchについて
□投稿者/ Azulean (42回)-(2012/09/30(Sun) 08:09:35)
No63708 (abcYear さん) に返信
> 改めて再度、プロジェクトを新規作成し、クラスライブラリを選択して作成しなおしました。
> その後問題なく、ビルドが通りました。なぜか原因がわかりませんが。。。

参照設定をしていないからです。
プロジェクトのプロパティ、共通プロパティ、Framework と参照で「System」を参照していなければエラーになります。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -