我的代碼是:力圖打造COORD的載體,導致連接錯誤
#pragma once
#include "stdafx.h"
#include <vector>
#include "field.h"
class output
{
void putAtLocation(COORD, char chIcon); //currently this outputs to console
static std::vector<COORD> m_vsOutputBuffer;
public:
output(void);
static void addToken(COORD);
void drawTokens();
~output(void);
};
和鏈接器錯誤是:
output.obj : error LNK2001: unresolved external symbol "private: static class std::vector<struct _COORD,class std::allocator<struct _COORD> > output::m_vsOutputBuffer" ([email protected]@@[email protected][email protected]@[email protected][email protected]@@[email protected]@@[email protected]@A)
這一定是問題行:
static std::vector<COORD> m_vsOutputBuffer;
我一直在這呆了幾個小時。
我終於注意到,將
我讀過它(鏈接器錯誤)通常是由相關性問題引起的。
COORD
更改爲
int
會導致鏈接器錯誤消失。
但這裏只是改變了
我也讀過它可能是由於它不應該是一種方式使用功能引起的。我認爲它必須是處理TYPE
。
COORD
的方式;或有關COORD
S是正向聲明,或適當地在output.cpp中引用。
編輯: 所有更改爲int的確是編譯器錯誤導致它永遠不會命中鏈接器。現在我回來了,以什麼
和cpp文件:
#include "stdafx.h"
#include "output.h"
#include <vector>
static std::vector<int> m_vsOutputBuffer;
output::output(void)
{
}
void output::addToken(COORD sCoordinate) //mark a coord in the buffer as needing refreshed
{
m_vsOutputBuffer.push_back(sCoordinate);
}
void output::drawTokens() //release the outputbuffer the the output window
{
for (unsigned int iii = 0; iii < m_vsOutputBuffer.size(); iii++)
{
putAtLocation(m_vsOutputBuffer[iii], field::checkHit(m_vsOutputBuffer[iii]));
}
}
void output::putAtLocation(COORD sCoordinate, char chIcon) //outputs a single character to the console
{
DWORD dwNumWritten = 0;
LPDWORD lpdNumWritten = &dwNumWritten;
WriteConsoleOutputCharacter(
GetStdHandle(STD_OUTPUT_HANDLE), //***repeatedly getting this handle may end up a bottleneck
LPCTSTR(&chIcon),
1,
sCoordinate,
lpdNumWritten
);
}
output::~output(void)
{
}
還我發現這一點:http://www.cplusplus.com/forum/general/6111/
於是我試着動靜態語句cpp文件,並編譯和運行。但不是它的成員變量。所以我需要以某種方式向前聲明向量(在聲明之前還在頭文件中創建靜態對象)
錯誤C2371:'m_vsOutputBuffer':重新定義;不同的基本類型 是錯誤給我,如果我補充說。我認爲在閱讀更多內容之後,現在不可能只聲明一個載體。 – Zak 2011-02-27 12:12:09
看起來像'COORD',你編譯的預編譯頭文件和你的.cpp編譯的'COORD'在某種程度上是不同的?多年來,我一直與MSVC合作,所以我有點生疏......我試圖暫時禁用預編譯頭文件,看看會發生什麼。此外,AFAIR,這是一個很好的做法,無論如何,包括您的標題,並不指望stdafx讓他們已經 – davka 2011-02-27 12:19:05
WOW,以及我禁用PCH,它建立,啓用它,仍然建立....我真的想知道什麼這可能是。 – Zak 2011-02-27 18:02:01