2015-11-20 24 views
6

私が取得しています:エラーC2514クラスにはコンストラクタがありません。しかし、それはありますか?

エラー1つのエラーC2514: 'をEmployeeListNode':クラスにはコンストラクタを持っていない私が持っている

しかしEmployeeListNode.hでListOfEmployee.cpp

class EmployeeListNode 
{ 
    friend class ListOfEmployee; 
public: 
    EmployeeListNode(string name, double salary); //A constructor no? 
}; 

なぜそれがコンストラクタとして認識されないのか分かりません。 申し訳ありませんが、これは愚かな質問ですが、私は検索を通じて答えを見つけることができませんでした。

編集:エラーを与えているListOfEmployeeのセクション:

void ListOfEmployee::insert(string nameIn, double salaryIn){ 
EmployeeListNode *n1 = new EmployeeListNode(nameIn, salaryIn); 
EmployeeListNode* tn; 
if (head){ 
    head = n1; 
}else{ 
    for (tn = head; tn->next; tn = tn->next); 
} 

} 編集2: そしてListOfEmployee.h場合、それは違いを作る:

#pragma once 
#include<string> 
using namespace std; 
class EmployeeListNode; 
class ListOfEmployee 
{ 
public: 
    ListOfEmployee(); 
    void insert(string name, double salary); 
    void display(); 
    void deleteMostRecent(); 
    double getSalary(string name); 
    ~ListOfEmployee(); 
private: 
    EmployeeListNode *head; 
}; 
+0

デフォルトで、どこかで 'EmployeeListNode'を構築しようとしているようです。クラスメンバとして1つあり、初期化リストで初期化していない可能性がありますか?エラーがどこから来たのか投稿してください。 – TartanLlama

+0

エラーを出しているListOfEmployee.cppのセクションを追加するように編集しました。 –

答えて

12

それができますListOfEmployeeNodeと宣言されているのは、それが使用されているヘッダー(したがってその定義)を含まないことだけです。

この場合、コンパイラはクラスについて認識していますが、コンストラクタを含むメンバーにはアクセスできません。

ヘッダーを含めた場合は、インクルードガードを確認してください。 2つのヘッダファイル内で同じものが存在する場合、プリプロセッサでその定義を捨てることができます

+0

はい、私はそれをcppに含めるのを忘れていました。私は今、馬鹿のように感じる。
ありがとうございました! –

+1

+1 [エラーC2514](https://msdn.microsoft.com/en-us/library/4ce3zbbc.aspx) – Clifford

+0

@Cliffordのドキュメントに示されている通りです。 –

関連する問題