我想我正在做我的包括錯誤,但我似乎無法找到我是做錯了什麼。我在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
感謝您的幫助,我希望我沒有因我英語不好而得罪你。
btw:我知道錯誤「signed/unsigned mismatch」是因爲「Testen.size()」函數返回一個int_t(signed)。所以這些錯誤現在不是我的問題 – Rps 2012-03-22 18:25:59
我希望*這種類型的錯誤消息是C++中最有問題的錯誤消息。 – ulidtko 2012-03-22 18:29:05