简单代码问题-未定义标识符
Simple Code issue - undefined identifier
我的代码遇到了一个问题,请参阅以下代码片段:
bool flag = false;
if(flag==false)
{
int var=0;
flag=true;
}
if(flag==true)
{
var=10;
}
在这种情况下,var被标记为未定义,CCS生成一个错误,这是完全正确的。只要一个变量是在if的内部定义的,外部就不知道。当然,在这种情况下,您可以重写代码。但在我的实际代码中,我必须从一个具有非默认构造函数的类中构建一个对象,除非使用if情况(至少我不知道如何),否则无法解决这个问题
我的实际代码:
SelectedSocket2=VCRT_selectset(&MasterSocket,1,-1);
if((SelectedSocket != VCRT_SOCKET_ERROR) && (SelectedSocket != 0))
{
ClientSocket=accept(MasterSocket, NULL, NULL);
CStreamer Streamer(ClientSocket);
CRtspSession RtspSession(ClientSocket,&Streamer);
flag=true;
}
//Streamer, RtspSession are outside unknown and CCS generates an error
有什么想法可以解决这个问题或欺骗编译器吗?
您可以使用动态分配来完成条件构造:
std::unique_ptr<CStreamer> Streamer;
if (...) {
Streamer = make_unique<CStreamer>(ClientSocket);
}
if (Streamer) Streamer->something();
请记住,由于对象是有条件构造的,因此它只存在于该分支所在的位置。因此,在使用之前需要额外的条件(或者也在else
分支上构造它)。
另一种方法是CCD_ 2。它不需要动态分配。您也可以使用缓冲区和新的放置来滚动自己的。小心对齐。
这个片段应该工作得更好:
bool flag = false;
int var = 0;
if (flag == false)
{
var = 0;
flag = true;
}
if (flag == true)
{
var = 10;
}
在您的代码片段中,var
是在if
范围内(在其关联的{}
之间)声明的。当到达第一个}
时,它被销毁。如果你想让它在第一个If之后继续存活,你必须在外面声明。
编辑:
有指针而没有动态分配(使用char[]伪造分配):
// Allocate the needed size for CStreamer (Statically
char _dummyCStreamer[sizeof(CStreamer)];
// Same for CRtspSession
char _dummyCRtspSession[sizeof(CRtspSession)];
SelectedSocket2 = VCRT_selectset(&MasterSocket, 1, -1);
// The following two lines are the trick
CStreamer *streamerPtr = (CStreamer *)_dummyCStreamer;
CRtspSession *RtspSessionPtr = (CRtspSession *)_dummyCRtspSession;
// Go ahead, you can now consider your two pointer as if they were statically allowed
if ((SelectedSocket != VCRT_SOCKET_ERROR) && (SelectedSocket != 0))
{
ClientSocket = accept(MasterSocket, NULL, NULL);
CStreamer Streamer(ClientSocket);
CRtspSession RtspSession(ClientSocket, &Streamer);
streamerPtr->operator=(Streamer);
sessionPtr->operator=(RtspSession);
flag = true;
}
注意,streamerPtr
和RtspSessionPtr
的寿命与_dummyCStreamer
和_dummyCRtspSession
的寿命有关。(分别)当然,您的类必须实现一个适当的运算符=。
相关文章:
- Visual Studio C++ PlaySound 标识符未定义
- 删除动态数组时未定义标识符
- 未定义的标识符/未声明
- 标识符Class_name未定义C++ oop
- 标识符"hWnd"未定义
- 为什么更改包含 psapi.h 的顺序会产生编译错误?(标识符 BOOL 未定义)
- Visual Studio 2019 概念标识符未定义
- 标识符"DDRB"未定义 - VS code / Visual Studio
- 在头文件中使用opencv类型来实现未定义的标识符
- 标识符"in"未定义
- 智能感知:标识符"node"未定义
- 标识符"__readgsqword"未定义 - Visual Studio 2017
- 标识符"V 未定义
- 标识符"thread"未定义
- 标识符uint8_t未定义 - Visual Studio 2017
- 未定义的标识符 - 缺少哪些头文件?- DX12.
- 调用函数时未定义标识符"function_name"
- Wininet未定义标识符
- 简单代码问题-未定义标识符
- 试图编写函数的未定义标识符