2012-03-22 55 views
0

我想我正在做我的包括錯誤,但我似乎無法找到我是做錯了什麼。我在w7 64位系統上使用visual studio 10。C++錯誤:嘗試創建對象時出現「未聲明的標識符」。標題問題?

編譯錯誤,我得到:

testd.cpp(9): warning C4018: '<' : signed/unsigned mismatch 
testd.cpp(21): warning C4018: '<' : signed/unsigned mismatch 
testd.cpp(36): error C2065: 'tmp' : undeclared identifier 
testd.cpp(37): error C2065: 'tmp' : undeclared identifier 
testd.cpp(37): error C2227: left of '->getTestId' must point to class/struct/union/generic type 
type is ''unknown-type'' 
testd.cpp(40): error C2065: 'tmp' : undeclared identifier 
testd.cpp(41): error C2065: 'tmp' : undeclared identifier 

所以每次我試圖做一個新的對象(TMP)的時候,他說:「未聲明的標識符」。 我的猜測是他無法獲得Test的類定義(aldho他並沒有警告我),但我不明白爲什麼是這樣..我將代碼減少到了最小,這樣只有錯誤功能依然存在。在此先感謝您的時間

test.h:一類測試,有2 atributes,干將,setter方法,構造函數和析構函數的定義

#pragma once 
class Test 
{ 
private: 
    int myTestId; 
    string myTestNaam;  
public: 
    Test(); 
    Test(string TestNaam,int TestId); 
    ~Test(); 
    int getTestId(); 
    string getTestNaam(); 
    void setTestId(int TestId); 
}; 

* TEST.CPP:功能定義類試驗

#include "stdafx.h" 
#include "headers/Test.h" 
Test::Test() {setTestId(0);} 
Test::Test(string TestNaam, int TestId) {setTestId(TestId);} 
Test::~Test() {}  
void Test::setTestId(int TestId) {myTestId=TestId;} 
int Test::getTestId() {return myTestId;} 

testd.h:一類TESTD的定義,與靜態矢量,和靜態函數

#pragma once 
#include "Test.h" 
class TestD 
{ 
private: 
    static vector<Test*> Testen; 
    static int getPosition(int ID); 
public: 
    static Test* newTest(Test*); 
    static Test* getTest(int ID); 
}; 

testd.cpp:對於類的功能定義TESTD

#include "StdAfx.h" 
#include "headers/Test.h" 
#include "headers/Testd.h" 
vector<Test*> TestD::Testen = vector<Test*>(); 
Test* TestD::getTest(int ID) 
{for(int i =0; i < Testen.size(); i++) 
    {Test* tmp = Testen.at(i); 
    if(tmp->getTestId() == ID) 
    return tmp; 
} 
return 0; 
} 

int TestD::getPosition(int ID) 
{for(int i = 0; i < Testen.size(); i++) 
    {Test* tmp = Testen.at(i); 
    if(tmp->getTestId() == ID) 
    return i; 
} 
return -1; 
} 

Test* TestD::newTest(Test* Test) 
{if(Test->getTestId()==-1) 
    {Test* tmp = Testen.at(Testen.size()-1); 
    int newId = tmp->getTestId()+1; 
    Test->setTestId(newId); 
    } 
    Test* tmp = getTest(Test->getTestId()); 
    if(tmp==0) 
{Testen.push_back(Test); 
    return Test; 
} 
} 

最後我包括我的Stdafx.h

#pragma once 
#include "targetver.h" 
#include <stdio.h> 
#include <tchar.h> 
#include <iostream> 
#include <vector> 
#include <algorithm> 
#include <string> 
using namespace std; 
//some includes are not used in the files I mentioned here, but other files need them 

感謝您的幫助,我希望我沒有因我英語不好而得罪你。

+0

btw:我知道錯誤「signed/unsigned mismatch」是因爲「Testen.size()」函數返回一個int_t(signed)。所以這些錯誤現在不是我的問題 – Rps 2012-03-22 18:25:59

+0

我希望*這種類型的錯誤消息是C++中最有問題的錯誤消息。 – ulidtko 2012-03-22 18:29:05

回答

3

首先,你不能定義一個變量,並將其命名方式與現有的類型:

Test* TestD::newTest(Test* Test) 

重命名測試變量。

然後簽署,簽名missmatch警告是因爲你比較std::vector::size的返回值,其中size_t,與int引起的:

for(int i =0; i < Testen.size(); i++) 

修改i的類型爲size_t,你會刪除警告:

for(size_t i =0; i < Testen.size(); i++) 
+0

立即嘗試! – Rps 2012-03-22 18:31:12

+0

謝謝你,先生,我的大部分問題都沒有解決。 總是讓另一個人看到自己的愚蠢 – Rps 2012-03-22 18:43:18

0
通常

聲明指針,你有新的分配,當像

Test *temp=new Test(...);