如何在C ++中定义var

时间:2015-06-19 07:54:54

标签: string visual-c++ c++-cli

此代码编译完美:

if ( args.Length() > 0 ) {
    if ( args[0]->IsString() ) {
        String::Utf8Value szQMN( args[0]->ToString() ) ;
        printf( "(cc)>>>> qmn is [%s].\n", (const char*)(* szQMN) ) ;
    } ;
} ;

但是这个没有:

if ( args.Length() > 0 ) {
    if ( args[0]->IsString() ) {
        String::Utf8Value szQMN( args[0]->ToString() ) ; // <<<< (A)
    } ;
} ;
printf( "(cc)>>>> qmn is [%s].\n", (const char*)(* szQMN) ) ; // <<<< (B)

错误说:“错误C2065:'szQMN':未声明的标识符”在线(B)

这对我来说意味着标有(A)的句子是同时作为分配的定义,对吗?

并且编译器决定它是“有条件”定义的,因为它在两个“IF”中?

我的问题是:如何将声明移出两个“IF”?

通过这种方式,我也可以给它一个defalut值......万一IF失败。

如果我从两个“IF”中写出这一行

String::Utf8Value szQMN ("") ;

...然后我收到错误:

cannot convert argument 1 from 'const char [1]' to 'v8::Handle<v8::Value>'

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

  

这对我来说意味着标有(A)的句子是同时作为分配的定义,对吗?

从技术上讲,它是一个构造函数调用,它创建一个变量并对其进行初始化。

另请注意,自动变量仅存在于范围的末尾(通常是{}括号内的块)。这就是你的第二个代码示例无法编译的原因。

if (condition)
{
    int x = 5;
}
x = 6; // error, x does not exist anymore
  

我的问题是:如何将声明移出两个“IF”?

String::Utf8Value szQMN ("");

这是类String::Utf8Value类的构造函数调用。从错误消息中获取类型为v8::Handle<v8::Value>的参数。不知道这是什么我不能给你一个答案如何称呼它。您希望传递""const char*类型的const char[1],并且编译器告诉您它不接受该参数。

修改

从评论中提供的DeepBlackDwarf链接,您可以从字符串创建Utf8Value:

std::string something("hello world"); 
Handle<Value> something_else = String::New( something.c_str() );

所以在你的情况下你会这样做:

String::Utf8Value szQMN (String::New(""));

答案 1 :(得分:0)

IF循环中的定义仅适用于此循环。 所以在(B)句中,定义已经过期了。 如果你需要在IF循环和外部使用var,你可以用这句话来声明全局变化:

extern String :: Utf8Value szQMN(args [0] - &gt; ToString());