2017-01-23 6 views
0

私はC++を見て始めました。私は頭を抱くことができないいくつかの問題を抱えています。オブジェクト関数呼び出しからintを返す(基本)

私は、関数を持つクラスを作成し、その関数を呼び出して戻り値を読み取るという単純なことをしようとしています。

しかし、私は軽微な問題であると思うことに固執しています。

私はそれがメインからの呼び出しであることを知っています - > randomNumberはこのエラーを引き起こしますが、なぜ私は知らないのですか?私は幸運なしに関数から数値12を返そうとしました。

エラー: error

私は3つのファイル(main.cppに、Die.hとDie.cpp)

main.cppに

#include <string> 

#include "Die.h" 

using namespace std; 

int main() { 
    Die * test = new Die(); 

    cout << std::to_string(test->randomNumber(4)) << endl; 

    return 0; 
} 

ダイスを持っています。 h

#pragma once 

#include <iostream> 
#include <ctime> 
#include <cstdlib> 

class Die 
{ 
public: 
    Die(); 
    ~Die(); 
    void init(); 
    void rollDie(int&, int&); 
    void rollDie(int*, int*); 
    int randomNumber(int); 

}; 

Die.cpp

#include "Die.h" 

Die::Die() 
{ 
} 


Die::~Die() 
{ 
} 

void Die::init() { 

} 

int randomNumber(int max) { 
    srand(static_cast<unsigned int>(time(0))); 
    return (rand() % max + 1); 
} 

void rollDie(int& die1, int& die2) { 

} 

void rollDie(int* die1, int* die2) { 

} 
+2

脇に: 'randomNumber'で' srand() 'を呼び出さないでください。' main() 'で一度呼びます。書かれているように、すべてのコールでRNGを再シードしているため、1秒間にダイをロールするたびに同じ乱数が得られます。 – duskwuff

+0

Noted、ありがとうsrandをメインに移動します:) –

+0

重複の関連する回答:[定義されていない参照/未解決の外部シンボルエラーとは何ですか、どうすれば修正できますか?](http://stackoverflow.com/a/12574407/ 962089)。それは、一般的なエラーは、名前を修飾することを忘れていると言って大きな見出しを持つセクションです。 – chris

答えて

4

あなたはrandomNumberrollDieの宣言にクラス指定子を逃しています。あなただけrandomNumberという名前のグローバル関数を宣言しているが、リンカがそれを見つけることができませんDie::randomNumberを選択しようとしているものをなし

int Die::randomNumber(int max)

Die.cpp

2

、あなたはクラス名とメンバ関数の前に付ける必要があります。それがなければ

int Die::randomNumber(int max) { ... } 

void Die::rollDie(int& die1, int& die2) { ... } 

void Die::rollDie(int* die1, int* die2) { ... } 

、コンパイラは、あなただけのグローバル関数を定義していると考えています。あなたが教えてくれないと、クラスに加わるべきだと思う理由はありません。

関連する問題