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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

C++

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

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

3回答

3598閲覧

Arduinoでのclassの書き方が分からない。

kalon

総合スコア198

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

C++

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

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2020/06/20 07:07

編集2020/06/20 07:42

前提・実現したいこと

いま教本を使って勉強して、自分でクラスを書いてみているのですが、エラーが出ています。
どこが間違っているのか検討が着かなくなってしまいました。
クラスの正しい書き方、メンバー変数とメンバー関数の正しい書き方を具体的に知りたくて質問しました。

発生している問題・エラーメッセージ

classes:16:1: error: 'm' does not name a type m.x = 10; ^ classes:17:1: error: 'm' does not name a type m.y = 20; ^ classes:18:1: error: 'm' does not name a type m.go(10, 20); ^ c:\Users\a\Dropbox\!Arduino\class\classes.ino: In function 'void setup()': classes:23:48: error: no matching function for call to 'HardwareSerial::println(const char [17], int&, int&)' Serial.println("x is %d, y is %d", m.x, m.y); ^ In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26:0, from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29, from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:233, from sketch\classes.ino.cpp:1: C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:77:12: note: candidate: size_t Print::println(const __FlashStringHelper*) size_t println(const __FlashStringHelper *); ^~~~~~~ C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:77:12: note: candidate expects 1 argument, 3 provided C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:78:12: note: candidate: size_t Print::println(const String&) size_t println(const String &s); ^~~~~~~ C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:78:12: note: candidate expects 1 argument, 3 provided C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:79:12: note: candidate: size_t Print::println(const char*) size_t println(const char[]); ^~~~~~~ C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:79:12: note: candidate expects 1 argument, 3 provided C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:80:12: note: candidate: size_t Print::println(char) size_t println(char); ^~~~~~~ C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:80:12: note: candidate expects 1 argument, 3 provided C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:81:12: note: candidate: size_t Print::println(unsigned char, int) size_t println(unsigned char, int = DEC); ^~~~~~~ C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:81:12: note: candidate expects 2 arguments, 3 provided C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:82:12: note: candidate: size_t Print::println(int, int) size_t println(int, int = DEC); ^~~~~~~ C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:82:12: note: candidate expects 2 arguments, 3 provided C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:83:12: note: candidate: size_t Print::println(unsigned int, int) size_t println(unsigned int, int = DEC); ^~~~~~~ C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:83:12: note: candidate expects 2 arguments, 3 provided C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:84:12: note: candidate: size_t Print::println(long int, int) size_t println(long, int = DEC); ^~~~~~~ C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:84:12: note: candidate expects 2 arguments, 3 provided C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:85:12: note: candidate: size_t Print::println(long unsigned int, int) size_t println(unsigned long, int = DEC); ^~~~~~~ C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:85:12: note: candidate expects 2 arguments, 3 provided C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:86:12: note: candidate: size_t Print::println(double, int) size_t println(double, int = 2); ^~~~~~~ C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:86:12: note: candidate expects 2 arguments, 3 provided C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:87:12: note: candidate: size_t Print::println(const Printable&) size_t println(const Printable&); ^~~~~~~ C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:87:12: note: candidate expects 1 argument, 3 provided C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:88:12: note: candidate: size_t Print::println() size_t println(void); ^~~~~~~

該当のソースコード

Arduino

1class Move 2{ 3public: 4 int x; 5 int y; 6 void go(int w, int h); 7}; 8 9void Move::go(int w, int h) 10{ 11 x += w; 12 y += h; 13} 14 15Move m; 16m.x = 10; 17m.y = 20; 18m.go(10, 20); 19 20void setup() 21{ 22 Serial.begin(9600); 23 Serial.println("x is %d, y is %d", m.x, m.y); 24} 25 26void loop() 27{ 28 29}

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

C/C++のクラスは生まれて初めて書きました。つっこみ満載かと思われますが、ご指摘頂けると助かります。

何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

逆(?)に、実行文は関数外には書けません。

また、Serial::printlnはprintfとは要求する引数が違います。

投稿2020/06/20 11:47

編集2020/06/20 11:48
thkana

総合スコア7629

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

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

guest

0

ベストアンサー

きっとこんなコトやりたいんだろなー...

C++

1class Move { 2public: 3 int x; 4 int y; 5 void go(int w, int h); 6}; 7 8void Move::go(int w, int h) { 9 x += w; 10 y += h; 11} 12 13Move m; 14 15void setup() { 16 Serial.begin(9600); 17 m.x = 10; 18 m.y = 20; 19 Serial.println("at start: x is %d, y is %d", m.x, m.y); 20} 21 22void loop() { 23 m.go(10, 20); 24 Serial.println("x is %d, y is %d", m.x, m.y); 25 26}

投稿2020/06/20 11:43

episteme

総合スコア16614

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

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

kalon

2020/06/20 21:54

まさにエスパーさん、助かります。
kalon

2020/06/20 22:06

コンパイルしたところ、 ``` classes:19:58: error: no matching function for call to 'HardwareSerial::println(const char [27], int&, int&)' Serial.println("at start: x is %d, y is %d", m.x, m.y); ``` printlnでエラーが出てしまいますね。printlnって今まで数値と文字列を直接しか入れたことがないので、 教えて頂けると助かります。
guest

0

クラスは関数の中に書くもんじゃないです。

というか、「C++ 入門」あたりでぐぐって一通り読んでみよう

投稿2020/06/20 07:16

y_waiwai

総合スコア87749

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

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

kalon

2020/06/20 07:41

稚拙な質問にご回答ありがとうございます。void setup{}自体が関数でしたね。 気付きませんでした。コードを修正してみて、色々試しましたがエラーが出て、やはりぐぐってもよく分かりませんでした。
y_waiwai

2020/06/20 07:44

ArduinoであればArduinoIDEの標準関数(?)のソースがどこかに付属しています。 それらをみていけば参考になりますよ。
y_waiwai

2020/06/20 07:53

ただ、Arduinoでクラスを使うというのは筋がよくありません。 というのは、対象のデバイス(ArduinoUNOとか)のメモリが絶望的に貧弱なため、限定的なクラスの使い方しかできません 付属のソースを読んでいっても、Cにちょっと毛の生えたような使い方しかしてないことがわかると思います
kalon

2020/06/20 21:52

そうなんですね。アドバイスありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問