質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

1329閲覧

クラス名の前にクラス名をつける書き方が分かりません【C++】【mayaAPI】

tama231

総合スコア1

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/10/21 09:46

前提・実現したいこと

mayaAPIでの質問です(けれどmayaに限らず文法の質問だと思います)

C++を最近勉強し始めた初心者です。自分なりに調べたのですがわからなかったので、質問させていただきます。
知りたいのは、該当のソースコードで書かれているMStatus helloWorld::doIt()のようなクラス名を2つ並べて書くような書き方はどういうことを表しているのかということです。

helloWorldクラスのdoItでなんの処理をするかを書いている部分だと思うのですが、じゃあhelloWorldの先頭についているMStatusはどういうふうな意味があるのかが分からず悩んでいます。

MStatusの定義へ飛んでみと

C++

1class _declspec( dllimport ) MStatus 2{ 3 // いろいろ 4}

という感じになっており、dllとのインターフェースになっている(エクスポートやインポートができる?)ということまでは調べたのですが、
それが具体的にクラスを2つ並べて各書き方にどうつながるのかがわかっていません。

非常に初歩的な質問だとは思うのですが、よろしくおねがいします。

該当のソースコード

とりあえず書いてあったコメントも載せています。

C++

1#include <maya/MIOStream.h> 2#include <maya/MSimple.h> 3 4// Use a Maya macro to setup a simple helloWorld class 5// with methods for initialization, etc. 6// 7DeclareSimpleCommand( helloWorld, PLUGIN_COMPANY, "4.5"); 8 9// All we need to do is supply the doIt method 10// which in this case is only a Hello World example 11// 12MStatus helloWorld::doIt( const MArgList& ) 13{ 14 cout<<"Hello World"<<endl; 15 return MS::kSuccess; 16}

補足情報(FW/ツールのバージョンなど)

https://www.autodesk.co.jp/developer-network/platform-technologies/maya
のMaya 2022 win64 開発キットを使っています。

ソースは
\devkitBase\devkit\plug-ins\helloWorldCmd\helloWorldCmd.cpp
です。

https://area.autodesk.jp/column/tutorial/maya-api/01-development-env/
↑この記事を見ながら進めていました。

【使用ソフト】
maya2022
Visual Studio2019

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2021/10/21 09:55 編集

(意図を取り間違っていたため伏せる)
BeatStar

2021/10/21 09:57

基礎からやりましょう。『C++入門』とかで検索するだけでも相当ヒットします。
dodox86

2021/10/21 09:59

@BeatStarさん 基本部分に関わることではあるかもしれませんが、APIであったりSDKであったりすると特有のマクロやキーワードが出現して初心の方には読み解くのが困難になりがちです。丸投げの決めつけは良くないです。
guest

回答2

0

ベストアンサー

まず、基礎からやりましょう

質問者さんには、ライブラリは早すぎます。
足し算すらわからないのに、微積分を理解しようとしているようなものです。
しかも、「二次関数が必要」とかみたいにわかっているのに調べようとすらしないっていうタイプの。

クラス云々なんだから、『C++ 入門』とかで出てくる、クラス関連のページを読めばいいはずです。
それと質問にあるコードを考えると、そもそもC言語の基礎すらできていないようです。

そもそもあり得ないです。

なぜ基礎をすっ飛ばすのでしょうか。

入門書とかに書かれていないような、デバッグ方法とかはわからないでもないですが、ガッツリ書かれています。

基礎が出来ていないなら応用なんてできるはずありません。

ここまで書いたので、一応ヒントとかも書いておきますが、次回からは自分で調べてやりましょう。
それすらしたくないならプログラミングをやめましょう。あまりにも不適切です。

リハビリが必要な人がリハビリを拒んで、アスリート並みの追い込みをしようとするようなものです。
明らかにガタがくるはずです。


まず、

MStatus helloWorld::doIt( const MArgList& ) { cout<<"Hello World"<<endl; return MS::kSuccess; }

の AAA::BBB のアレは、『メンバ関数の定義』です。名称は違うかもしれませんが。

AAAに属しているBBBメンバ関数を定義しますよ。っていうことです。

MStatus 云々は『型』です。
厳密には知りませんが、構造体, クラス, typdefした型, usingした型, union, 列挙体 のどれかでしょうね。

ただ、return MS::kSuccess とあるので、多分 列挙体。

関数の構造は、

関数の型 関数名(引数){ // なんらかの処理 return 戻り値; }

が基本です。

ただし、関数の型 = 戻り値の型 です。

よって、MStatus helloWorld::doIt( const MArgList& ) は、

引数としてMArgListてのを受け取り、処理してMStatusとして返すhelloworldクラスのdoItメンバ関数、ってところでしょうね。

ただし、MArgListとか MStatusが何者なのか知りませんが。(だって純粋なC/C++には無いし)

単純に、

int func1( long a ); みたいなものの引数や戻り値がクラスだったりenum(列挙体)だったりとかするだけです。


[追記1]

ご指摘を受けて、「Maya C++ MStatus」で検索すると、どうやらクラスみたいですね。
ここを見ると、

Public Types
enum MStatusCode {

kSuccess = 0,
kFailure,
// (中略)
kEndOfFile
}

とあります。

なので、

class MStatus{ public: enum MStatusCode{ kSuceess = 0, // その他のenumの値 }; MStatus(); };

とかみたいな感じになっているのではないかなと。

つまり、『クラス内にある列挙体』のようですね。

投稿2021/10/21 10:11

編集2021/10/21 10:45
BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tama231

2021/10/21 10:26

細かく教えていただきありがとうございます。 私自身突っ走ってしまって、回答者様に不快な思いをさせてしまったのかなと思い、反省しております。 ご教授いただいたとおり、ライブラリはとりあえず置いておいて、入門書でしっかり学びたいと思います。
BeatStar

2021/10/21 10:32

不快と言うほどじゃないですが、「なーんで、基礎をすっ飛ばすのかなぁ」という疑問には思っていますね。 中には『基礎からやりましょう』と言っても『ふざけんな。Youがやれや』とか逆ギレする人が多いので。 (やる気ないのになんでこの界隈に来ているんだろうという純粋(?)な疑問ですが) まあ、質問者さんはそのタイプではなく、単に方向性がわかっていなかっただけなので。 > ライブラリはとりあえず置いておいて、入門書でしっかり学びたいと思います。 頑張ってください。そこからやって、一つ一つステップアップしていけば、大抵の問題は解決できるはずです。
dodox86

2021/10/21 10:33

> MStatus helloWorld::doIt( const MArgList& ) > { > cout<<"Hello World"<<endl; > return MS::kSuccess; > } のMS:kSuccessの値は確かに列挙体、enumですが、このメンバー関数の返り値の型はMStatusでclassです。その不一致を不思議には思いませんでしたか。私はあれれ?と不思議に思いました。実際にdevkitをダウンロードしてコードを読んで理解はしましたが、初心の方がこのコードの字面だけを読んで理解するのは、「基礎ができていればすんなり」とはいかないと思います。
BeatStar

2021/10/21 10:38

@ dodox86さん > ...その不一致を不思議には思いませんでしたか あー、そうか……orz 最近C#を使っているので違和感なく取っていましたが、確かにC++での列挙体の使い方はこれじゃないですね。 (MStatusはクラスだったんですか……)
BeatStar

2021/10/21 10:39

再度確認したところ、確かにクラスみたいですね。
dodox86

2021/10/21 10:59

あと、せっかくなので指摘させていただきたいのですが、BeatStarさんの文には「かもしれない」とか「厳密には知りませんが」とか「どれか」とか「多分」とか「みたい」とか、明言を避けている部分が多過ぎます。読みづらいですし、せっかくの回答の信ぴょう性が薄れるので、ウラを取った上で断言するか、分からないものであればいっそ書かない方が良いと思います。老婆心からではありますが、失礼いたしました。
BeatStar

2021/10/21 11:01

了解しました。
guest

0

返り値の型がMStatusということです

投稿2021/10/21 10:06

ozwk

総合スコア13532

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問