Ожидаемый конец ошибки Statement в VBS [duplicate]

Отсутствует «extern» в объявлениях / определениях переменной const (только для C ++)

Для людей, прибывающих с C, может показаться неожиданным, что в C ++ глобальные переменные const имеют внутренние (или статические) связь. В C это не так, поскольку все глобальные переменные неявно extern (т.е. когда отсутствует ключевое слово static).

Пример:

// file1.cpp
const int test = 5;    // in C++ same as "static const int test = 5"
int test2 = 5;

// file2.cpp
extern const int test;
extern int test2;

void foo()
{
 int x = test;   // linker error in C++ , no error in C
 int y = test2;  // no problem
}

correct would использовать файл заголовка и включить его в file2.cpp и file1.cpp

extern const int test;
extern int test2;

. В качестве альтернативы можно было бы объявить переменную const в файле file1.cpp с явным extern

0
задан user10056 12 September 2013 в 02:59
поделиться

2 ответа

Код, который вы опубликовали, вероятно, написан на VB.net (или, возможно, на VBA). Вы связываете для запуска кода как VBScript, который не поддерживает типизированные параметры и переменные. Он также не предоставляет объект реестра, который вы пытаетесь использовать. Измените процедуру следующим образом:

Private Sub AddCurrentKey(ByVal name As String, ByVal path As String)
  Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True) 
  key.SetValue(name, path) 
End Sub

на это:

Private Sub AddCurrentKey(ByVal name, ByVal path)
  Dim key : key = "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
  CreateObject("WScript.Shell").RegWrite key & "\" & name, path
End Sub

, и проблема исчезнет.

3
ответ дан Ansgar Wiechers 24 August 2018 в 03:27
поделиться

VBScript по-прежнему использует «старый» синтаксис Visual Basic. Что отличает вызовы функций, используемые в выражениях и процедурных вызовах, которые являются операторами. Вы используете (круглые скобки) в выражении, но не в инструкции. Fix:

 key.SetValue name, path 

Или если вы предпочитаете:

 Call key.SetValue(name, path)

Сообщение об ошибке трудно интерпретировать, потому что интерпретатор сценария считает, что вы пытаетесь написать это:

 key.SetValue (name), path

Это означает что-то совершенно другое. VBScript передает аргументы ByRef. Дополнительные круглые скобки вокруг имени превращают его в выражение, которое создает копию переменной. Он может быть изменен с помощью процедуры SetValue, не влияя на переменную name . Не то, что он на самом деле делает, и то, что вы намеревались.

2
ответ дан Hans Passant 24 August 2018 в 03:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: